summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-12-18 14:31:07 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-12-18 14:31:07 +0000
commitcfd61537b47387b0fb5c8228baad6cec16d8f6e6 (patch)
tree108deea65c09c7c273a9b981f8783efcd433eaea
parent4391b4a6ee42bdfd8e097c5ee5485e9eb13f19a0 (diff)
xpp r5151:
* xpd_pri: Basically ready. * PCM synchronization changes: - Each Astribank unit ticks independently. Each with its own PLL. - HOST synchronization is gone. Loading of xpp will no longer cause useless 250 ticks per second if you have no Astribank. - Synchronization from the zaptel sync master requires setting ZAPTEL as sync source (xpp_sync ZAPTEL). * rx_tasklet is now a parameter of the module xpp, rather than of xpp_usb. * New FPGA firmware: 5128 (1151) / 5122 (1141, 1131): - Fixes synchronization issues. - PRI module: E1 should now work. * perl module and utilities: - Modules no longer magically scan system on initialization. - Scanning is by calling explicit methods. - "Serial" has been renamed "Label". It is basically unique, but should be modifieble. - Some basic documentation of zaptel perl modules. * Default sort order of zt_registration is back to SORT_CONNCTOR. * zt_registration proc file now shows the number of span registered to if registered. Try: grep . /proc/xpp/XBUS-*/XPD-*/zt_registration * genzaptelconf: Allow using a custom command instead of /etc/init.d/asterisk to start/stop asterisk. * Fixed the typo "Slagish". git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.2@3506 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--wctdm24xxp/GpakCust.c1
-rw-r--r--xpp/.version2
-rw-r--r--xpp/Changelog_xpp25
-rw-r--r--xpp/Makefile2
-rw-r--r--xpp/README.Astribank983
-rw-r--r--xpp/README.metering50
-rw-r--r--xpp/card_bri.c84
-rw-r--r--xpp/card_fxo.c119
-rw-r--r--xpp/card_fxo.h2
-rw-r--r--xpp/card_fxs.c183
-rw-r--r--xpp/card_global.c135
-rw-r--r--xpp/card_global.h8
-rw-r--r--xpp/card_pri.c452
-rw-r--r--xpp/firmwares/FPGA_1141.hex1281
-rw-r--r--xpp/firmwares/FPGA_1151.hex1320
-rw-r--r--xpp/firmwares/FPGA_FXS.hex1260
-rwxr-xr-xxpp/init_card_9_29273
-rw-r--r--xpp/utils/example_default_zaptel4
-rw-r--r--xpp/utils/fpga_load.c46
-rwxr-xr-xxpp/utils/genzaptelconf13
-rw-r--r--xpp/utils/hexfile.c2
-rw-r--r--xpp/utils/test_parse.c2
-rwxr-xr-xxpp/utils/xpp_blink19
-rw-r--r--xpp/utils/xpp_fxloader4
-rw-r--r--xpp/utils/xpp_fxloader.usermap2
-rwxr-xr-xxpp/utils/xpp_sync71
-rwxr-xr-xxpp/utils/zapconf38
-rwxr-xr-xxpp/utils/zaptel_drivers4
-rwxr-xr-xxpp/utils/zaptel_hardware83
-rw-r--r--xpp/utils/zconf/XppUtils.pm52
-rw-r--r--xpp/utils/zconf/Zaptel.pm43
-rw-r--r--xpp/utils/zconf/Zaptel/Chans.pm40
-rw-r--r--xpp/utils/zconf/Zaptel/Hardware.pm33
-rw-r--r--xpp/utils/zconf/Zaptel/Hardware/PCI.pm37
-rw-r--r--xpp/utils/zconf/Zaptel/Hardware/USB.pm45
-rw-r--r--xpp/utils/zconf/Zaptel/Span.pm50
-rw-r--r--xpp/utils/zconf/Zaptel/Xpp.pm113
-rw-r--r--xpp/utils/zconf/Zaptel/Xpp/Xbus.pm80
-rw-r--r--xpp/utils/zconf/Zaptel/Xpp/Xpd.pm67
-rwxr-xr-xxpp/utils/zt_registration25
-rw-r--r--xpp/xbus-core.c931
-rw-r--r--xpp/xbus-core.h202
-rw-r--r--xpp/xbus-pcm.c1156
-rw-r--r--xpp/xbus-pcm.h106
-rw-r--r--xpp/xbus-sysfs.c12
-rw-r--r--xpp/xdefs.h10
-rw-r--r--xpp/xframe_queue.c250
-rw-r--r--xpp/xframe_queue.h34
-rw-r--r--xpp/xpd.h154
-rw-r--r--xpp/xpp_usb.c832
-rw-r--r--xpp/xpp_zap.c987
-rw-r--r--xpp/xpp_zap.h8
-rw-r--r--xpp/xproto.c97
-rw-r--r--xpp/xproto.h14
-rw-r--r--xpp/zap_debug.h59
55 files changed, 6812 insertions, 5093 deletions
diff --git a/wctdm24xxp/GpakCust.c b/wctdm24xxp/GpakCust.c
index c1940fb..231b1ac 100644
--- a/wctdm24xxp/GpakCust.c
+++ b/wctdm24xxp/GpakCust.c
@@ -37,6 +37,7 @@
#include <linux/version.h>
#include <linux/delay.h>
+#include <linux/device.h>
#include <asm/semaphore.h>
#include "zaptel.h"
diff --git a/xpp/.version b/xpp/.version
index 016eda5..1ab7164 100644
--- a/xpp/.version
+++ b/xpp/.version
@@ -1 +1 @@
-branch-rel-4816-r5010
+trunk-r5151
diff --git a/xpp/Changelog_xpp b/xpp/Changelog_xpp
index 582ebcc..9069a05 100644
--- a/xpp/Changelog_xpp
+++ b/xpp/Changelog_xpp
@@ -1,3 +1,28 @@
+Tue Dec 18 2007 Tzafrir Cohen <tzafrir.cohen@xorcom.com> - xpp.r5151
+ * xpd_pri: Basically ready.
+ * PCM synchronization changes:
+ - Each Astribank unit ticks independently. Each with its own PLL.
+ - HOST synchronization is gone. Loading of xpp will no longer cause
+ useless 250 ticks per second if you have no Astribank.
+ - Synchronization from the zaptel sync master requires setting
+ ZAPTEL as sync source (xpp_sync ZAPTEL).
+ * rx_tasklet is now a parameter of the module xpp, rather than of xpp_usb.
+ * New FPGA firmware: 5128 (1151) / 5122 (1141, 1131):
+ - Fixes synchronization issues.
+ - PRI module: E1 should now work.
+ * perl module and utilities:
+ - Modules no longer magically scan system on initialization.
+ - Scanning is by calling explicit methods.
+ - "Serial" has been renamed "Label". It is basically unique, but
+ should be modifieble.
+ - Some basic documentation of zaptel perl modules.
+ * Default sort order of zt_registration is back to SORT_CONNCTOR.
+ * zt_registration proc file now shows the number of span registered to
+ if registered. Try: grep . /proc/xpp/XBUS-*/XPD-*/zt_registration
+ * genzaptelconf: Allow using a custom command instead of
+ /etc/init.d/asterisk to start/stop asterisk.
+ * Fixed the typo "Slagish".
+
Wed Nov 14 2007 Tzafrir Cohen <tzafrir.cohen@xorcom.com> - xpp.r5010
* Fix a deadlock spotted on some SMP installations.
* increase FXS ring detect debounce interval.
diff --git a/xpp/Makefile b/xpp/Makefile
index cc73e6e..bde055e 100644
--- a/xpp/Makefile
+++ b/xpp/Makefile
@@ -30,7 +30,7 @@ ifneq (,$(HAS_BRISTUFF))
obj-m += xpd_bri.o
endif
-xpp-y += xbus-core.o xbus-sysfs.o xpp_zap.o xproto.o card_global.o
+xpp-y += xbus-core.o xbus-sysfs.o xbus-pcm.o xframe_queue.o xpp_zap.o xproto.o card_global.o
xpd_fxs-y += card_fxs.o
xpd_fxo-y += card_fxo.o
xpd_bri-y += card_bri.o
diff --git a/xpp/README.Astribank b/xpp/README.Astribank
index af1c690..6e7cdb2 100644
--- a/xpp/README.Astribank
+++ b/xpp/README.Astribank
@@ -9,6 +9,8 @@ The drivers reside in a separate subdirectory, xpp/ .
It is generally a more technical document than the
http://www.xorcom.com/documentation/manuals/[Astribank User Manual]
+An HTML version of the latest version of this document could be found at
+http://rapid.tzafrir.org.il/docs/README.Astribank.html[]
Building and Installation
-------------------------
@@ -26,10 +28,6 @@ In order to build the user space utilities, you will need the libusb-dev
package on Debian (and derivatives like Ubuntu) or libusb-devel on RedHat
(and derivatives like CentOS/Trixbox).
-
-INSTALLATION
-------------
-
Apart from the standard 'make install' in the zaptel directory,
run:
@@ -37,23 +35,432 @@ run:
Though this should be done automatically on zaptel >= 1.4.1 .
-Alternatively, do the following manually:
-All firmware files and scripts should be copied to the new directory:
- /usr/share/zaptel/
+Sample Configurations
+---------------------
+We generally recommend to generate the configuration by using utility
+genzaptelconf. The following reference configuration will work for a
+system where Astribank devices are used.
-xpp_fxloader.usermap should be copied to:
- /etc/hotplug/usb/
-Run:
+[[sect-default]]
+Zaptel Init Configuration File
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The zaptel init.d script, genzaptelconf and the XPD init scripts uses the
+parameters located in file /etc/default/zaptel (on Debian) or
+/etc/sysconfig/zaptel (on RedHats). There is a number of useful parameters
+that may be defined there:
- /usr/share/zaptel/xpp_fxloader load
+-----------------------------------------------------------
+# Lines beginning with '#' are considered comments and ignored.
-to load firmware.
+# A two-letter country code. genzaptelconf uses it to better guess
+# the configuration it generates. E.g: the signalling of E1 spans, and
+# a few other country-specific settings.
+lc_country=us
+# See genzaptelconf(8) and the script itself for a longer list of
+# variables.
-LEDs Indication
+# Equivalent to the parameter opermode to the module wctdm: country-specific
+# settings to the FXO lines. For a complete list of possible values, see
+# /usr/share/zaptel/init_fxo_mode .
+#opermode=FCC
+#opermode=FRANCE
+
+# xpp_sync runs with the value of 'XPP_SYNC' as its parameter to set the
+# synchronization source. The default is 'auto' that selects the best
+# Astribank. 'ZAPTEL' gets synchronization from the Zaptel sync master
+# span. Or a specific xbus number.
+#XPP_SYNC=ZAPTEL
+
+# Disables hotplug firmware loading
+#XPP_HOTPLUG_DISABLED=yes
+#
+
+# Disables udev hook called when an astribank is added and ready
+# or removed.
+#ASTRIBANK_HOOK_DISABLED=yes
+
+# Setup for XPP PRI. This allows to have fixed settings:
+# 1. The variable XPP_PRI_SETUP contains a whitespace separated list of
+# port specifications.
+# 2. Each port specification contains a match expression, a '=' and
+# a setting string.
+# 2. Match expressions may be:
+# - CONNECTOR/usb..../XPD-nn To identify by physical connector
+# - NUM/XBUS-mm/XPD-nn To identify by bus number
+# 4. Match expressions may contain "wildcards" (which are translated
+# internally to regular expressions):
+# * matches zero or more characters.
+# ? matches one charater
+# 5. The list of matches is scanned from beginning to end. First match wins.
+# 6. The list implicitly contains an 'NUM/*=TE,E1' catch all default, appended
+# to its end.
+# 7. The setting string is composed of comma separated settings. Valid
+# settings are:
+# - NT or TE
+# - E1 or T1 or J1
+#
+#XPP_PRI_SETUP='
+# CONNECTOR/usb-0000:00:1d.7-1/XPD-01=NT,E1
+# NUM/*/XPD-03=NT,E1
+# '
+-----------------------------------------------------------
+
+/etc/zaptel.conf
+~~~~~~~~~~~~~~~~
+
+Astribank 8
+^^^^^^^^^^^
+ fxoks=1-14
+
+Astribank 6FXS/2FXO
+^^^^^^^^^^^^^^^^^^^
+ fxoks=1-12
+ fxsks=13-14
+
+Astribank 16: 8FXS/8FXO
+^^^^^^^^^^^^^^^^^^^^^^^
+ fxoks=1-14
+ fxsks=15-22
+
+Astribank 4 BRI
+^^^^^^^^^^^^^^^
+ # Assumed ports settings:
+ # Ports 1,3: TE
+ # Ports 2,4: NT
+ span=1,1,1,ccs,ami
+ span=2,0,1,ccs,ami
+ span=3,2,1,ccs,ami
+ span=4,0,1,ccs,ami
+ bchan=1-2
+ dchan=3
+ bchan=4-5
+ dchan=6
+ bchan=7-8
+ dchan=9
+ bchan=10-11
+ dchan=12
+
+
+/etc/asterisk/zapata.conf
+~~~~~~~~~~~~~~~~~~~~~~~~~
+Astribank 8
+^^^^^^^^^^^
+ [channels]
+ signalling=fxo_ks
+ ; The real analog ports:
+ context=from-internal
+ echocancel=yes
+ ; echocancelwhenbriged=yes
+ ; echotraining=no
+ channel => 1-8
+
+ ; output ports:
+ context=astbank-output
+ channel => 9-10
+ ; input ports:
+ immediate=yes
+ context=astbank-input
+ channel => 11-14
+ immediate=no
+
+Astribank 6FXS/2FXO
+^^^^^^^^^^^^^^^^^^^
+ [channels]
+ signalling=fxo_ks
+ ; The real analog ports:
+ context=from-internal
+ echocancel=yes
+ ; echocancelwhenbriged=yes
+ ; echotraining=no
+ channel => 1-6
+
+ ; output ports:
+ context=astbank-output
+ channel => 7-8
+ ; input ports:
+ immediate=yes
+ context=astbank-input
+ channel => 9-12
+ immediate=no
+
+ ; FXO ports
+ signalling=fxs_ks
+ context=from-pstn
+ callerid=asreceived
+ channel => 13-14
+
+Astribank 16: 8FXS/8FXO
+^^^^^^^^^^^^^^^^^^^^^^^
+ [channels]
+ signalling=fxo_ks
+ ; The real analog ports:
+ context=from-internal
+ echocancel=yes
+ ; echocancelwhenbriged=yes
+ ; echotraining=no
+ channel => 1-8
+
+ ; output ports:
+ context=astbank-output
+ channel => 9-10
+ ; input ports:
+ immediate=yes
+ context=astbank-input
+ channel => 11-14
+ immediate=no
+
+ ; FXO ports
+ signalling=fxs_ks
+ context=from-pstn
+ callerid=asreceived
+ channel => 15-22
+
+Astribank 4 BRI
+^^^^^^^^^^^^^^^
+ ; Assumed ports settings:
+ ; Ports 1,3: TE
+ ; Ports 2,4: NT
+ [channels]
+ switchtype = euroisdn
+ callerid = asreceived
+
+ ; TE ports:
+ signalling = bri_cpe_ptmp
+ ;signalling = bri_cpe
+ context = from-pstn
+ group = 1,11
+ channel => 1,2
+
+ group = 1,13
+ channel => 7,8
+
+ ; NT ports:
+ signalling = bri_net_ptmp
+ ;signalling = bri_net
+ context = from-internal
+ group = 2,12
+ channel => 4,5
+
+ group = 2,14
+ channel => 10,11
+
+
+Please check, that the mailbox and callerid parameters generated by
+genzaptelconf are good for you and change them if necessary.
+
+
+If you have Astribank device with 8 FXS and 8FXO ports connected and set up, then
+the Zaptel channels will be allocated as the following:
+
+ root@rapid:~# cat /proc/zaptel/*
+ Span 1: XBUS-00/XPD-00 "Xorcom XPD #00/00: FXS"
+
+ 1 XPP_FXS/00/00/0 FXOLS (In use)
+ 2 XPP_FXS/00/00/1 FXOLS (In use)
+ 3 XPP_FXS/00/00/2 FXOLS (In use)
+ 4 XPP_FXS/00/00/3 FXOLS (In use)
+ 5 XPP_FXS/00/00/4 FXOLS (In use)
+ 6 XPP_FXS/00/00/5 FXOLS (In use)
+ 7 XPP_FXS/00/00/6 FXOLS (In use)
+ 8 XPP_FXS/00/00/7 FXOLS (In use)
+ 9 XPP_OUT/00/00/8 FXOLS (In use) (no pcm)
+ 10 XPP_OUT/00/00/9 FXOLS (In use) (no pcm)
+ 11 XPP_IN/00/00/10 FXOLS (In use) (no pcm)
+ 12 XPP_IN/00/00/11 FXOLS (In use) (no pcm)
+ 13 XPP_IN/00/00/12 FXOLS (In use) (no pcm)
+ 14 XPP_IN/00/00/13 FXOLS (In use) (no pcm)
+ Span 2: XBUS-00/XPD-01 "Xorcom XPD #00/01: FXO" (MASTER)
+
+ 15 XPP_FXO/00/01/0 FXSKS (In use)
+ 16 XPP_FXO/00/01/1 FXSKS (In use) (no pcm)
+ 17 XPP_FXO/00/01/2 FXSKS (In use) (no pcm)
+ 18 XPP_FXO/00/01/3 FXSKS (In use) (no pcm)
+ 19 XPP_FXO/00/01/4 FXSKS (In use) (no pcm)
+ 20 XPP_FXO/00/01/5 FXSKS (In use) (no pcm)
+ 21 XPP_FXO/00/01/6 FXSKS (In use) (no pcm)
+ 22 XPP_FXO/00/01/7 FXSKS (In use) (no pcm)
+
+
+
+/etc/asterisk/extensions.conf
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Sample dialplan (extensions.conf) for all the above:
+
+-----------------------------------------------------------
+[phones-zap]
+; 6001 will dial to channel 1, 6020, to zaptel channel 20, etc.
+exten => _6XXX,1,Dial(ZAP/${EXTEN:1})
+; Useful for debugging trunks. Will potentially allow users to
+; bypass context limitations.
+;exten => _6XXX.,1,Dial(ZAP/${EXTEN:1:3}/${EXTEN:4})
+
+[trunk]
+; A number that begins with 9: dial it through a trunk
+; (we put FXO channels and TE channels in group 0).
+; The leading 9 is stripped.
+exten => _9.,1,Dial(Zap/g0/${EXTEN:1})
+; dialing a number that begins with 83 will dial it through
+; span 3, and so forth. The two leading digits are stripped.
+; (Each digital span is also added to group 10+span number).
+exten => _8X.,1,Dial(Zap/g1${EXTEN:1:1}/${EXTEN:2})
+
+[from-internal]
+; The context of FXS ports: analog phones.
+; They are allowed to dial to all other phones
+include => phones-zap
+; They are also allowed to call through the trunk:
+include => trunk
+; some simple tests:
+include => astbank-test
+
+[from-pstn]
+; Calls from the PSTN enter here. Redirect calls to an IVR
+; or a default extension in the s context here. In this case we
+; redirect calls to Zaptel channel 1:
+exten => s,1,Dial(Zap/1)
+
+; Alternatively, the following will redirect you to the demo IVR
+; from the sample extensions.conf of Asterisk:
+include => demo
+
+; An extra context with some simple tests
+[astbank-test]
+; 200: echo test
+exten => 200,1,Answer
+exten => 200,n,Wait(1)
+exten => 200,n,Echo()
+exten => 200,n,Hangup
+
+; 203: say extension number. Will only work if caller ID
+; is properly set in zapata.conf / zapata-channels.conf
+exten => 203,1,Answer
+exten => 203,n,Wait(1)
+exten => 203,n,SayNumber(${CALLERID(num)})
+exten => 203,n,Hangup
+
+[astbank-input]
+exten => s,1,Set(ZAP_CHAN=${CUT(CHANNEL,-,1)})
+exten => s,n,Set(ZAP_CHAN=${CUT(ZAP_CHAN,/,2)})
+; 11 is the number of the first input port. At least in the sample
+; configuration below.
+;exten => s,n,Set(INPUT_NUM=$[${ZAP_CHAN}-11)])
+; The sample below just logs the signal.
+exten => s,n,NoOp(Got signal from Zaptel Channel ${ZAP_CHAN})
+; Alternatively:
+;exten => s,n,System(run something)
+
+; No. We did not forget the context astbank-outputs. Output
+; ports only get calls from the PBX. Thus they don't need a context
+; of their own. Sending them to a context of their on makes
+; 'zap show channels' in the CLI provide useful display, though.
+-----------------------------------------------------------
+
+
+Troubleshhoting
---------------
+The following commands provide useful information for debugging:
+
+* Check USB level status. You can use one of the following utilities for it:
+
+ zaptel_hardware
+ or
+ lsusb | grep e4e4
+
+ - Look for the USB Product ID (the second number after e4e4).
+ - If you see *11x2* (e.g: 1152)- the FPGA firmware has been loaded.
+ Move on.
+ zaptel_hardware will also show you some more details if the driver
+ is loaded while the lsusb will just list the device.
+ - If it shows something as product ID *11x0* - the USB firmware is not
+ loaded. Maybe you need to run fxload. Or maybe just unplug and plug again
+ the device.
+ - If lsusb shows the Product ID as *11x1* - only the USB firmware is loaded
+ and not the FPGA firmware is loaded. If this is still the case after
+ a while - either the firmware loading has failed or you don't have
+ fpga_load. Make sure you have libusb-dev(el) installed when
+ building Zaptel.
+ - It should list all of your Astribank devices. If it doesn't (for
+ more than period of time needed for the initial firmware
+ loading) - Check that the Astribank is connected indeed.
+
+* Check if the Astribank spans are registered in Zaptel
+
+ zt_registration
+
+ - This should give useful results after the drivers have identified
+ and your devices are initialized.
+ - It should list all Astribank XPDs. For each of them it should write
+ "on" or "off". If the registration status is "off", then it means that
+ the span has not been registered in Zaptel and therefore can not be used
+ yet.
+ - Registration is normally done as part of `/etc/init.d/zaptel start`.
+ If you want to register the spans manually, then run command:
+ `zt_registration on` .
+ - Disabling of the automatic Astribank spans registration give you full
+ control on the order of Zaptel spans. See the module parameter
+ **zap_autoreg** for the further details.
+
+* Check the Zaptel information:
+ You can get some information regarding Zaptel channels by running one of the
+ following commands:
+
+ lszaptel
+ or
+ cat /proc/zaptel/*
+
+ - Those two are almost the same. The lszaptel produced more correctly sorted
+ output if you have more than 10 spans, and also make the output listing
+ looks a little bit nicer.
+ - You can see if your Zaptel spans and channels were loaded, if
+ they were configured by ztcfg and if they are in use (typically by
+ Asterisk).
+ For example:
+ Not configured Astribank FXS channel will be displayed as:
+
+ 42 FXS
+
+ When a channel has been configured with *ztcfg* (that applies
+ /etc/zaptel.conf), you will see an extra column for the signalling
+ type of the channel. The same channel after it has been configured:
+
+ 42 FXS FXOKS
+
+ If a program (which is typically Asterisk) uses it, you'll see:
+
+ 42 FXS FXOKS (In use)
+
+* Check the Asterisk information:
+
+ asterisk -rx 'zap show channels'
+
+ - If you get error "Unable to connect to remote asterisk" then it
+ means that the Asterisk is not running. It is possible that Asterisk
+ has failed to start due to misconfigured zapata.conf or whatever reason.
+ Check /var/log/asterisk/messages or /var/log/asterisk/full .
+ - If you get the error that "there is no such command" then it means that
+ chan_zap.so is not loaded. There are two reasons for such problem:
+ (a) chan_zap.so is not even built. Check if the file exists:
+
+ ls -l /usr/lib/asterisk/modules/chan_zap.so
+
+ (b) the chan_zap.so file exists but it is not loaded. Try to load it manually:
+
+ asterisk -rx 'load module chan_zap.so'
+
+ - You see "pseudo" channel only. It means that you have not configured any
+ channels. If you have configured channels in zapata.conf, you may
+ need either to restart the Asterisk or unload/load chan_zap.so manually.
+ You can use the following Asterisk CLI commands for it: `unload chan_zap.so` and
+ `load chan_zap.so`
+
+
+Reference
+---------
+LEDs Indication
+~~~~~~~~~~~~~~~
The Astribank has 4 global indication leds and one or two per-port leds.
On some of the models the LEDs are located on the left side on the front
panel. If there are no separate LEDs there, then the red LEDs of the
@@ -89,13 +496,13 @@ is up. A slower single blinking indicates that layer 2 is up as well
DEVICE STARTUP
---------------
+~~~~~~~~~~~~~~
This section describes in great depth the initialization of the Xorcom
Astribank. Normally it would not be really needed, as the standard
installation of Zaptel should put everything in place.
Terminology
-~~~~~~~~~~~
+^^^^^^^^^^^
There are some technical terms that are used in this document and in the
driver / zaptel.
@@ -116,7 +523,7 @@ module or a single port in case of a BRI module.
Loading Firmware
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
Normally this is done using the script /usr/share/zaptel/xpp_fxloader.
If it works fine, you don't need to bother reading this section.
Once the firmware is loaded the USB Vendor ID and Product ID of the Astribank
@@ -175,7 +582,7 @@ incremented by 1.
Firmware Loading with Hotplug
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Hotplug framework was popular for hotplugging different devices and
usually also for automatic device drivers loading. If Hotplug is used in
your system, you'll see many files in folder /etc/hotplug. Hotplug will
@@ -203,7 +610,7 @@ firmware the device will re-enumerate itself and thus "unplug" and
Firmware Loading with UDEV
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^^^^^^^
The UDEV framework has replaced Hotplug in most recent systems. If you
have a recent 2.6 system without Hotplug and with many files in folder
/etc/udev, then there are good chances that are you using udev.
@@ -224,7 +631,7 @@ second time for FPGA firmware loading.
Firmware Resetting
-~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^
Newer versions of the USB firmware can now be reset using 'fpga_load -r'.
Also you can try the following:
@@ -238,7 +645,7 @@ Also you can try the following:
Loading The Modules
-~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^
Here is what should happen:
In short: you should plug the Astribank device(s) or have them plugged in at
the boot time. Then all the modules should be loaded automatically.
@@ -256,8 +663,10 @@ Now to the ugly details:
The driver of the Astribank is composed of several modules:
* xpp - the basic module, that communicates with Zaptel and provides
some common services to other modules.
-* xpd_fxs - the module for controlling FXS spans.
-* xpd_fxo - the module for controlling FXO spans.
+* xpd_fxs - the module for controlling FXS modules.
+* xpd_fxo - the module for controlling FXO modules.
+* xpd_bri - the module for controlling BRI modules.
+* xpd_pri - the module for controlling E1/T1 modules.
* xpd_usb - the module that holds the functionality needed to connect to the
USB bus.
@@ -280,13 +689,11 @@ When command 'modprobe xpp_usb' returns, the span type specific modules
At this point the xpp driver "asks" the box about type of telephony modules
it has. According to the answers it receives, the xpp driver will "modprobe"
-the required xpd_* modules. In some earlier versions of the driver this
-operation required some special modprobe.conf configuration, but this is no
-longer the case.
+the required xpd_* modules.
Device Initializations Scripts
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The chips in the device need to be initialized. This requires sending a
bunch of values to certain registers in those chips. We decided that
hardwriting those values in the driver code is not a good idea.
@@ -310,7 +717,7 @@ of an FXS XPD may take a few seconds.
Registering in Zaptel
-~~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^^
The XPDs will not automatically register as zaptel spans. This is
intended to allow you to set the registration order (and hence the order
of Zaptel spans and channels) among multiple Astribank devices,
@@ -348,7 +755,7 @@ parameter zap_autoreg in the modprobe configuration file (A file under
Zaptel And Above
-~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^
From here you get a standard Zaptel span. It still needs to be
configured by ztcfg and used by a program such as Asterisk like any
other Zaptel device. In order for you to get a dialtone in a phone
@@ -372,359 +779,176 @@ already sane defaults). For digital spans - BRI and PRI , it may take
some tuning.
Alternatively, write you own configuration, based on the sample from the
-following section:
-
-
-
-SAMPLE CONFIGURATIONS
----------------------
-We generally recommend to generate the configuration by using utility
-genzaptelconf. The following reference configuration will work for a
-system where Astribank devices are used.
+"Sample Configurations" section.
-/etc/zaptel.conf
-~~~~~~~~~~~~~~~~
-Astribank 8
-^^^^^^^^^^^
- fxoks=1-14
-
-Astribank 6FXS/2FXO
-^^^^^^^^^^^^^^^^^^^
- fxoks=1-12
- fxsks=13-14
-
-Astribank 16: 8FXS/8FXO
-^^^^^^^^^^^^^^^^^^^^^^^
- fxoks=1-14
- fxsks=15-22
-
-Astribank 4 BRI
-^^^^^^^^^^^^^^^
- # Assumed ports settings:
- # Ports 1,3: TE
- # Ports 2,4: NT
- span=1,1,1,ccs,ami
- span=2,0,1,ccs,ami
- span=3,2,1,ccs,ami
- span=4,0,1,ccs,ami
- bchan=1-2
- dchan=3
- bchan=4-5
- dchan=6
- bchan=7-8
- dchan=9
- bchan=10-11
- dchan=12
-
-
-/etc/asterisk/zapata.conf
-~~~~~~~~~~~~~~~~~~~~~~~~~
-Astribank 8
-^^^^^^^^^^^
- [channels]
- signalling=fxo_ks
- ; The real analog ports:
- context=from-internal
- echocancel=yes
- ; echocancelwhenbriged=yes
- ; echotraining=no
- channel => 1-8
-
- ; output ports:
- context=astbank-output
- channel => 9-10
- ; input ports:
- immediate=yes
- context=astbank-input
- channel => 11-14
- immediate=no
-
-Astribank 6FXS/2FXO
-^^^^^^^^^^^^^^^^^^^
- [channels]
- signalling=fxo_ks
- ; The real analog ports:
- context=from-internal
- echocancel=yes
- ; echocancelwhenbriged=yes
- ; echotraining=no
- channel => 1-6
-
- ; output ports:
- context=astbank-output
- channel => 7-8
- ; input ports:
- immediate=yes
- context=astbank-input
- channel => 9-12
- immediate=no
-
- ; FXO ports
- signalling=fxs_ks
- context=from-pstn
- callerid=asreceived
- channel => 13-14
-
-Astribank 16: 8FXS/8FXO
-^^^^^^^^^^^^^^^^^^^^^^^
- [channels]
- signalling=fxo_ks
- ; The real analog ports:
- context=from-internal
- echocancel=yes
- ; echocancelwhenbriged=yes
- ; echotraining=no
- channel => 1-8
+/proc Interface
+~~~~~~~~~~~~~~~
+The Astribank drivers provide their own /proc interface under /proc/xpp.
+(Note that the details of this interface are still potentially subject to
+changes)
- ; output ports:
- context=astbank-output
- channel => 9-10
- ; input ports:
- immediate=yes
- context=astbank-input
- channel => 11-14
- immediate=no
+/proc/xpp/xbuses
+^^^^^^^^^^^^^^^^
+File /proc/xpp/xbuses lists the connected Astribank devices (one line
+per device).
- ; FXO ports
- signalling=fxs_ks
- context=from-pstn
- callerid=asreceived
- channel => 15-22
+A device is normally has status "connected". The status "missing" means that
+the device has been disconnected, but Asterisk still holds channels from it
+open.
-Astribank 4 BRI
-^^^^^^^^^^^^^^^
- ; Assumed ports settings:
- ; Ports 1,3: TE
- ; Ports 2,4: NT
- [channels]
- switchtype = euroisdn
- callerid = asreceived
-
- ; TE ports:
- signalling = bri_cpe_ptmp
- ;signalling = bri_cpe
- context = from-pstn
- group = 1,11
- channel => 1,2
-
- group = 1,13
- channel => 7,8
-
- ; NT ports:
- signalling = bri_net_ptmp
- ;signalling = bri_net
- context = from-internal
- group = 2,12
- channel => 4,5
-
- group = 2,14
- channel => 10,11
+/proc/xpp/sync
+^^^^^^^^^^^^^^
+A read/write file. It contains information about current synchronization
+source. You can change the synchronization source by writing special
+command to the file. For example, command
+ echo SYNC=01 > /proc/xpp/sync
+Possible values are:
-Please check, that the mailbox and callerid parameters generated by
-genzaptelconf are good for you and change them if necessary.
+<number>::
+ Make the Astribank XBUS-<number> the sync source for other Astribanks.
+ZAPTEL::
+ Make the astribanks synchronize with the Zaptel timing master span.
+ You probably ned this to get faxes from a non-Astribank adapter to an
+ Astribank.
-If you have Astribank device with 8 FXS and 8FXO ports connected and set up, then
-the Zaptel channels will be allocated as the following:
+Though you'll normally use xpp_sync(8) for that.
- root@rapid:~# cat /proc/zaptel/*
- Span 1: XBUS-00/XPD-00 "Xorcom XPD #00/00: FXS"
+For each Astribank device there is folder /proc/xpp/XBUS-nn and for each device
+module (span in the therms of Zaptel) there is folder /proc/XBUS-nn/XPD-mm.
- 1 XPP_FXS/00/00/0 FXOLS (In use)
- 2 XPP_FXS/00/00/1 FXOLS (In use)
- 3 XPP_FXS/00/00/2 FXOLS (In use)
- 4 XPP_FXS/00/00/3 FXOLS (In use)
- 5 XPP_FXS/00/00/4 FXOLS (In use)
- 6 XPP_FXS/00/00/5 FXOLS (In use)
- 7 XPP_FXS/00/00/6 FXOLS (In use)
- 8 XPP_FXS/00/00/7 FXOLS (In use)
- 9 XPP_OUT/00/00/8 FXOLS (In use) (no pcm)
- 10 XPP_OUT/00/00/9 FXOLS (In use) (no pcm)
- 11 XPP_IN/00/00/10 FXOLS (In use) (no pcm)
- 12 XPP_IN/00/00/11 FXOLS (In use) (no pcm)
- 13 XPP_IN/00/00/12 FXOLS (In use) (no pcm)
- 14 XPP_IN/00/00/13 FXOLS (In use) (no pcm)
- Span 2: XBUS-00/XPD-01 "Xorcom XPD #00/01: FXO" (MASTER)
- 15 XPP_FXO/00/01/0 FXSKS (In use)
- 16 XPP_FXO/00/01/1 FXSKS (In use) (no pcm)
- 17 XPP_FXO/00/01/2 FXSKS (In use) (no pcm)
- 18 XPP_FXO/00/01/3 FXSKS (In use) (no pcm)
- 19 XPP_FXO/00/01/4 FXSKS (In use) (no pcm)
- 20 XPP_FXO/00/01/5 FXSKS (In use) (no pcm)
- 21 XPP_FXO/00/01/6 FXSKS (In use) (no pcm)
- 22 XPP_FXO/00/01/7 FXSKS (In use) (no pcm)
+/proc/xpp/XBUS-nn/XPD-mm/zt_registration
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+is a read/write file. Reading from it gives 0 if the span is
+unregistered, or the span number if it is registered.
+Writing to it allows manual registration / unregistration from Zaptel:
+writing 1 registers a span (if it wasn't already registered) and writing
+0 attempts to unregister it (if it is registered. Span unregistration
+will fail if some channels from the span are used (e.g: by Asterisk).
-Sample dialplan (extensions.conf) for all the above:
+A more convient interface to this is the command zt_registration that
+registers or unregisters all the spans at once with a predefined order,
+and this is what you should normally use.
------------------------------------------------------------
-[phones-zap]
-; 6001 will dial to channel 1, 6020, to zaptel channel 20, etc.
-exten => _6XXX,1,Dial(ZAP/${EXTEN:1})
-; Useful for debugging trunks. Will potentially allow users to
-; bypass context limitations.
-;exten => _6XXX.,1,Dial(ZAP/${EXTEN:1:3}/${EXTEN:4})
+Alternatively you can use the parameter zap_autoreg to register spans
+automatically. But this is only recommended on a system with a single
+Astribank and no other Zaptel device.
-[trunk]
-; A number that begins with 9: dial it through a trunk
-; (we put FXO channels and TE channels in group 0).
-; The leading 9 is stripped.
-exten => _9.,1,Dial(Zap/g0/${EXTEN:1})
-; dialing a number that begins with 83 will dial it through
-; span 3, and so forth. The two leading digits are stripped.
-; (Each digital span is also added to group 10+span number).
-exten => _8X.,1,Dial(Zap/g1${EXTEN:1:1}/${EXTEN:2})
-[from-internal]
-; The context of FXS ports: analog phones.
-; They are allowed to dial to all other phones
-include => phones-zap
-; They are also allowed to call through the trunk:
-include => trunk
-; some simple tests:
-include => astbank-test
+/proc/xpp/XBUS-nn/XPD-mm/summary
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Contains detailed information about port statuses of the device module
+(off-hook, on-hook etc.) For example, you can run the following command
+in order to monitor the port statuses in the real time:
-[from-pstn]
-; Calls from the PSTN enter here. Redirect calls to an IVR
-; or a default extension in the s context here. In this case we
-; redirect calls to Zaptel channel 1:
-exten => s,1,Dial(Zap/1)
+ watch -n1 cat /proc/xpp/XBUS-00/XPD-00/summary
-; Alternatively, the following will redirect you to the demo IVR
-; from the sample extensions.conf of Asterisk:
-include => demo
-; An extra context with some simple tests
-[astbank-test]
-; 200: echo test
-exten => 200,1,Answer
-exten => 200,n,Wait(1)
-exten => 200,n,Echo()
-exten => 200,n,Hangup
+/proc/xpp/XBUS-nn/XPD-mm/slics
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Provides direct read/write interface to the registers of each chip.
+Reading from the file shows the result of the last read request. To make
+either a read request or a write request you need to write to that file.
-; 203: say extension number. Will only work if caller ID
-; is properly set in zapata.conf / zapata-channels.conf
-exten => 203,1,Answer
-exten => 203,n,Wait(1)
-exten => 203,n,SayNumber(${CALLERID(num)})
-exten => 203,n,Hangup
+It is mainly used by the initialization scripts (card_init_*).
-[astbank-input]
-exten => s,1,Set(ZAP_CHAN=${CUT(CHANNEL,-,1)})
-exten => s,n,Set(ZAP_CHAN=${CUT(ZAP_CHAN,/,2)})
-; 11 is the number of the first input port. At least in the sample
-; configuration below.
-;exten => s,n,Set(INPUT_NUM=$[${ZAP_CHAN}-11)])
-; The sample below just logs the signal.
-exten => s,n,NoOp(Got signal from Zaptel Channel ${ZAP_CHAN})
-; Alternatively:
-;exten => s,n,System(run something)
-; No. We did not forget the context astbank-outputs. Output
-; ports only get calls from the PBX. Thus they don't need a context
-; of their own. Sending them to a context of their on makes
-; 'zap show channels' in the CLI provide useful display, though.
------------------------------------------------------------
+/proc/xpp/XBUS-nn/XPD-mm/fxo_info
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Only for FXO modules. Apart from showing the status of the LEDs, it also
+shows for each FXO port if it is connected to a provider: look for the
+value of "battery" for that specific port.
-/proc Interface
----------------
-The Astribank drivers provide their own /proc interface under /proc/xpp.
-(Note that the details of this interface are still potentially subject to
-changes)
+/proc/xpp/XBUS-nn/XPD-mm/bri_info
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+In addition to the usual information about the LEDs, this file also
+provides useful information regarding ISDN Layer 1 and Layer 2 status.
+For example, you can run the following command in order to monitor
+the Layer 1 port statuses for all BRI devices in the real time:
-File /proc/xpp/xbuses lists the connected Astribank devices (one xbus per device.)
-A device is normally has status "connected". The status "missing" means that
-the device has been disconnected, but Asterisk still holds channels from it
-open.
+ watch -n1 -d 'grep "Layer 1:" /proc/xpp/XBUS-*/XPD-*/bri_info'
-File /proc/xpp/sync is a read/write file. It contains information about current
-synchronization source. You can change the synchronization source by writing
-special command to the file. For example, command
- echo SYNC=01 > /proc/xpp/sync
-will force the system to use the Astribank device connected to span 1 as the
-synchronization source.
+For the status of the D channel of the ports on all BRI spans, run:
-For each Astribank device there is folder /proc/xpp/XBUS-nn and for each device
-module (span in the therms of Zaptel) there is folder /proc/XBUS-nn/XPD-mm.
+ watch -n1 -d 'grep D-Channel: /proc/xpp/XBUS-*/XPD-*/bri_info'
-File /proc/xpp/XBUS-nn/XPD-mm/zt_registration is a read/write file that may be
-used for registering/unregistering the span in Zaptel manually. A span will be
-register automatically when generated, though. Span unregistration may
-fail if some channels from the span are used (e.g: by Asterisk).
-You can register or unregister particular span manually by writing 1 or 0
-and unregistration is by writing 0 to the file.
-File /proc/xpp/XBUS-nn/XPD-mm/summary contains detailed information
-about port statuses of the device module (off-hook, on-hook etc.)
+/proc/xpp/XBUS-nn/XPD-mm/pri_info
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+In addition to the usual information about the LEDs, this file also
+provides useful information regarding ISDN Layer 1 and Layer 2 status.
For example, you can run the following command in order to monitor
-the port statuses in the real time:
+the Layer 1 port statuses for all E1/T1 devices in the real time:
-watch -n1 cat /proc/xpp/XBUS-00/XPD-00/summary
+ watch -n1 -d 'grep "Layer 1:" /proc/xpp/XBUS-*/XPD-*/pri_info'
-In case of FXO modules, you can also see if there is a line connected to
-a FXO port. See value of parameter "line" in file
-/proc/xpp/XBUS-nn/XPD-mm/fxo_info provides.
+For the status of the D channel of the ports on all PRI spans, run:
-In case of BRI modules, /proc/xpp/XBUS-nn/XPD-mm/bri_info provides very
-useful information regarding ISDN Layer 1 and Layer 2 status.
-For example, you can run the following command in order to monitor
-the Layer 1 port statuses for all BRI devices in the real time:
-
- watch -n1 -d 'grep "Layer 1:" /proc/xpp/XBUS-*/XPD-*/bri_info'
+ watch -n1 -d 'grep D-Channel: /proc/xpp/XBUS-*/XPD-*/pri_info'
-For the status of the D channel of the ports on all BRI spans, run:
+Note: the layer 2 status is much more of a guesswork based on changes in
+the contents of the channel that is supposed to be the D channel.
- watch -n1 -d 'grep D-Channel: /proc/xpp/XBUS-*/XPD-*/bri_info'
+Writing to this file can be used to change the type of the device. The
+device type can only be changed when the XPD is not registered as a
+Zaptel span. The value is a whitespace-separated list of values that can
+be of:
-There are a bunch of other status files under /proc/xpp/.
+E1::
+ Provides 31 channels, of which channel 16 is normally the D-channel.
+ Common in places outside of North America and Japan. This is the
+ default setup.
+T1::
+ T1 provides 24 channels. The last one is normally the D-Channel.
+ Common in North America.
-Zaptel Init Configuration File
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-The zaptel init.d script, genzaptelconf and the XPD init scripts uses the
-parameters located in file /etc/default/zaptel (on Debian) or
-/etc/sysconfig/zaptel (on RedHats). There is a number of useful parameters
-that may be defined there:
+TE::
+ Use the bottom port (green LED) and don't invert any wiring. Hint to
+ higher layers that this will be the TE side of the connection. This is
+ the default setup.
------------------------------------------------------------
-# Lines beginning with '#' are considered comments and ignored.
+NT::
+ Use the top port (orange LED) and invert wiring (this is done to allow
+ connecting an NT port and a TE port using a standard straight 8 wires
+ "ethernet" cable). Hint to higher layers that this will be the NT side
+ of the connection.
-# A two-letter country code. genzaptelconf uses it to better guess
-# the configuration it generates. E.g: the signalling of E1 spans, and
-# a few other country-specific settings.
-lc_country=us
+Normally those are set by the PRI initialization script . See the
+definition of XPP_PRI_SETUP in xref:sect-default[the sample Zaptel init
+configuration file] .
-# See genzaptelconf(8) and the script itself for a longer list of
-# variables.
+There are a bunch of other status files under /proc/xpp/.
-# Equivalent to the parameter opermode to the module wctdm: country-specific
-# settings to the FXO lines. For a complete list of possible values, see
-# /usr/share/zaptel/init_fxo_mode .
-#opermode=FCC
-#opermode=FRANCE
------------------------------------------------------------
Useful Module Parameters
~~~~~~~~~~~~~~~~~~~~~~~~
Compilation-time defaults for the all modules can be shown as part of the
description line for the parameter in the "modinfo" command output.
-zap_autoreg (xpp):
- Register spans automatically (1) or not (0). Default: 1.
- Unsetting this could be useful if you have several Astribanks and you
- want to set their registration order manually using zt_registration in
- the /proc interface.
+zap_autoreg (xpp)::
+ Register spans automatically (1) or not (0). Default: 0.
+ Setting it simplifies operations with a single Astribank and no other
+ zaptel hardware. However if you have such systems, automatic
+ registration can cause the order of spans to be unpredictable.
+ The standard startup scripts use 'zt_registration on' instead of this.
-initdir (xpp):
+initdir (xpp)::
This is the directory containing the initialization scripts.
The default is /usr/share/zaptel .
Setting this value could be useful if that location is inconvenient for you.
-print_dbg (all modules):
+rx_tasklet (xpp)::
+ Enable (1) or disable (0) doing most of the packets processing in
+ separate tasklets. This should probably help on higher-end systes with
+ multiple Astribanks.
+
+print_dbg (all modules)::
It will make the driver to print tons of debugging messages. You can
set/unset the parameter at run-time.
@@ -749,7 +973,7 @@ print_dbg (all modules):
forces module xpp to print general debugging messages (1) and procfs
debugging messages (32).
-vmwineon (xpd_fxs):
+vmwineon (xpd_fxs)::
Enable (1) or disable (0) sending the voicemail message waiting indication
signal to phones equipped with the Message Wainting neon lamp. It is
disabled by default because the feature requires extra work of the driver
@@ -781,109 +1005,6 @@ dtmf_detection (xpd_fxs)::
Enable (1) or disable (0) support of hardware DTMF detection by the
Astribank.
-rx_tasklet (xpp_usb)::
- Enable (1) or disable (0) doing most of the packets processing in
- separate tasklets. This should probably help on higher-end systes with
- multiple Astribanks.
-
-
-TROUBLESHOOTING
---------------
-The following commands provide useful information for debugging:
-
-* Check USB level status. You can use one of the following utilities for it:
-
- zaptel_hardware
- or
- lsusb | grep e4e4
-
- - Look for the USB Product ID (the second number after e4e4).
- - If you see *11x2* (e.g: 1152)- the FPGA firmware has been loaded.
- Move on.
- zaptel_hardware will also show you some more details if the driver
- is loaded while the lsusb will just list the device.
- - If it shows something as product ID *11x0* - the USB firmware is not
- loaded. Maybe you need to run fxload. Or maybe just unplug and plug again
- the device.
- - If lsusb shows the Product ID as *11x1* - only the USB firmware is loaded
- and not the FPGA firmware is loaded. If this is still the case after
- a while - either the firmware loading has failed or you don't have
- fpga_load. Make sure you have libusb-dev(el) installed when
- building Zaptel.
- - It should list all of your Astribank devices. If it doesn't (for
- more than period of time needed for the initial firmware
- loading) - Check that the Astribank is connected indeed.
-
-* Check if the Astribank spans are registered in Zaptel
-
- zt_registration
-
- - This should give useful results after the drivers have identified
- and your devices are initialized.
- - It should list all Astribank XPDs. For each of them it should write
- "on" or "off". If the registration status is "off", then it means that
- the span has not been registered in Zaptel and therefore can not be used
- yet.
- - Registration is normally done as part of `/etc/init.d/zaptel start`.
- If you want to register the spans manually, then run command:
- `zt_registration on` .
- - Disabling of the automatic Astribank spans registration give you full
- control on the order of Zaptel spans. See the module parameter
- **zap_autoreg** for the further details.
-
-* Check the Zaptel information:
- You can get some information regarding Zaptel channels by running one of the
- following commands:
-
- lszaptel
- or
- cat /proc/zaptel/*
-
- - Those two are almost the same. The lszaptel produced more correctly sorted
- output if you have more than 10 spans, and also make the output listing
- looks a little bit nicer.
- - You can see if your Zaptel spans and channels were loaded, if
- they were configured by ztcfg and if they are in use (typically by
- Asterisk).
- For example:
- Not configured Astribank FXS channel will be displayed as:
-
- 42 FXS
-
- When a channel has been configured with *ztcfg* (that applies
- /etc/zaptel.conf), you will see an extra column for the signalling
- type of the channel. The same channel after it has been configured:
-
- 42 FXS FXOKS
-
- If a program (which is typically Asterisk) uses it, you'll see:
-
- 42 FXS FXOKS (In use)
-
-* Check the Asterisk information:
-
- asterisk -rx 'zap show channels'
-
- - If you get error "Unable to connect to remote asterisk" then it
- means that the Asterisk is not running. It is possible that Asterisk
- has failed to start due to misconfigured zapata.conf or whatever reason.
- Check /var/log/asterisk/messages or /var/log/asterisk/full .
- - If you get the error that "there is no such command" then it means that
- chan_zap.so is not loaded. There are two reasons for such problem:
- (a) chan_zap.so is not even built. Check if the file exists:
-
- ls -l /usr/lib/asterisk/modules/chan_zap.so
-
- (b) the chan_zap.so file exists but it is not loaded. Try to load it manually:
-
- asterisk -rx 'load module chan_zap.so'
-
- - You see "pseudo" channel only. It means that you have not configured any
- channels. If you have configured channels in zapata.conf, you may
- need either to restart the Asterisk or unload/load chan_zap.so manually.
- You can use the following Asterisk CLI commands for it: `unload chan_zap.so` and
- `load chan_zap.so`
-
NOTE: XPP here does not stand for X Printing Panel, XML Pull Parser,
X-Windows Phase Plane or XML Professional Publisher. It is simply the
diff --git a/xpp/README.metering b/xpp/README.metering
deleted file mode 100644
index 751d74f..0000000
--- a/xpp/README.metering
+++ /dev/null
@@ -1,50 +0,0 @@
-Astribank Metering Interface
-""""""""""""""""""""""""""""
-
-In analog phone lines, some PBX'es can generate/detect special tones
-used for billing the call (phone metering).
-
-Astribank FXS and FXO drivers now support these features if compiled
-with -DWITH_METERING
-
-Software interface:
- FXS - To generate a metering pulse, write the channel number (0-7) into
- the file:
-
- /proc/xpp/XBUS-nn/XPD-mm/metering_gen
-
- Where:
- nn = XBUS number
- mm = XPD number
-
- Writing channel number 31 signifies a broadcast -- i.e: generate
- metering pulse on all channels.
-
- Example:
-
- echo 31 > /proc/xpp/XBUS-00/XPD-00/metering_gen
-
- FXO - To read current metering counters from an FXO, simply read:
-
- /proc/xpp/XBUS-nn/XPD-mm/metering_read
-
- The format is self documenting:
-
- # Chan Meter (since last read)
- 0 5
- 1 0
- 2 12
- ...
-
- Reading this file reset the counters. So the numbers always show
- the meters since last read.
-
- The metering register should be sampled at a rate which is double
- than the highest expected metering pulses. This rate is adjustable
- via a module parameter "poll_metering_interval". The current default
- is 500ms which is good if the metering pulses are sent not more
- often than once per second.
-
-Remark: The FXS hardware can generate maximum 0.85 volt RMS, while the FXO
- needs a minimum of 1.1 volt RMS for detection. Therefore, this
- feature cannot be tested in a loopback (Astribank-FXS to Astribank-FXO).
diff --git a/xpp/card_bri.c b/xpp/card_bri.c
index 3e67c4d..fb423a3 100644
--- a/xpp/card_bri.c
+++ b/xpp/card_bri.c
@@ -481,7 +481,7 @@ static int send_bri_multibyte(xpd_t *xpd, byte *buf, int len, bool eoftx)
XPD_ERR(xpd, "%s: len=%d is too long. dropping.\n", __FUNCTION__, len);
return -EINVAL;
}
- XFRAME_NEW(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
reg_cmd = &RPACKET_FIELD(pack, GLOBAL, REGISTER_REQUEST, reg_cmd);
reg_cmd->bytes = len;
reg_cmd->eoframe = eoftx;
@@ -643,15 +643,6 @@ static int BRI_card_init(xbus_t *xbus, xpd_t *xpd)
ret = run_initialize_registers(xpd);
if(ret < 0)
goto err;
-#if 1
-#warning "Test BRI! (removed old SYNC_SOURCE manipulation)"
-#else
- /*
- * FPGA firmware limitation:
- * Force HOST sync *before* sending PCM
- */
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_HOST, 0);
-#endif
XPD_DBG(PROC, xpd, "done\n");
priv->initialized = 1;
return 0;
@@ -848,7 +839,7 @@ static int BRI_card_tick(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!priv->initialized)
+ if(!priv->initialized || !xbus->self_ticking)
return 0;
if(poll_interval != 0 && (priv->tick_counter % poll_interval) == 0) {
// XPD_DBG(GENERAL, xpd, "%d\n", priv->tick_counter);
@@ -902,6 +893,26 @@ static int BRI_card_tick(xbus_t *xbus, xpd_t *xpd)
return 0;
}
+static int BRI_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long arg)
+{
+ BUG_ON(!xpd);
+ if(!TRANSPORT_RUNNING(xpd->xbus))
+ return -ENODEV;
+ switch (cmd) {
+ case ZT_TONEDETECT:
+ /*
+ * Asterisk call all span types with this (FXS specific)
+ * call. Silently ignore it.
+ */
+ LINE_DBG(SIGNAL, xpd, pos, "BRI: Starting a call\n");
+ return -ENOTTY;
+ default:
+ report_bad_ioctl(THIS_MODULE->name, xpd, pos, cmd);
+ return -ENOTTY;
+ }
+ return 0;
+}
+
static int BRI_card_close(xpd_t *xpd, lineno_t pos)
{
struct zt_chan *chan = &xpd->span.chans[pos];
@@ -982,7 +993,7 @@ static int bri_startup(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!xpd->xbus->hardware_exists) {
+ if(!TRANSPORT_RUNNING(xpd->xbus)) {
XPD_DBG(GENERAL, xpd, "Startup called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -1017,7 +1028,7 @@ static int bri_shutdown(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!xpd->xbus->hardware_exists) {
+ if(!TRANSPORT_RUNNING(xpd->xbus)) {
XPD_DBG(GENERAL, xpd, "Shutdown called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -1075,7 +1086,6 @@ static void BRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t wanted_li
static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
{
- volatile u_char *r;
byte *pcm;
xpp_line_t pcm_mask;
unsigned long flags;
@@ -1087,6 +1097,8 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
*/
if(xpd->addr.subunit != 0)
return;
+ if(!SPAN_REGISTERED(xpd))
+ return;
pcm = RPACKET_FIELD(pack, GLOBAL, PCM_READ, pcm);
pcm_mask = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines);
for(subunit = 0; subunit < MAX_SUBUNIT; subunit++, pcm_mask >>= SUBUNIT_PCM_SHIFT) {
@@ -1095,19 +1107,15 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
if(!pcm_mask)
break; /* optimize */
tmp_xpd = xpd_byaddr(xbus, xpd->addr.unit, subunit);
- if(!tmp_xpd || !tmp_xpd->card_present)
+ if(!tmp_xpd || !tmp_xpd->card_present || !SPAN_REGISTERED(tmp_xpd))
continue;
spin_lock_irqsave(&tmp_xpd->lock, flags);
- if (tmp_xpd->timer_count & 1) {
- /* First part */
- r = tmp_xpd->readchunk;
- } else {
- r = tmp_xpd->readchunk + ZT_CHUNKSIZE * CHANNELS_PERXPD;
- }
- for (i = 0; i < 2; i++, r += ZT_CHUNKSIZE) {
+ for (i = 0; i < 2; i++) {
xpp_line_t tmp_mask = pcm_mask & (BIT(0) | BIT(1));
+ volatile u_char *r;
if(IS_SET(tmp_mask, i)) {
+ r = tmp_xpd->span.chans[i].readchunk;
// memset((u_char *)r, 0x5A, ZT_CHUNKSIZE); // DEBUG
// fill_beep((u_char *)r, 1, 1); // DEBUG: BEEP
memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
@@ -1155,7 +1163,7 @@ static /* 0x33 */ HOSTCMD(BRI, SET_LED, enum bri_led_names which_led, enum led_s
XPD_DBG(LEDS, xpd, "%s -> %d\n",
(which_led)?"RED":"GREEN",
to_led_state);
- XFRAME_NEW(xframe, pack, xbus, BRI, SET_LED, xpd->xbus_idx);
+ XFRAME_NEW_CMD(xframe, pack, xbus, BRI, SET_LED, xpd->xbus_idx);
bri_leds = &RPACKET_FIELD(pack, BRI, SET_LED, bri_leds);
bri_leds->state = to_led_state;
bri_leds->led_sel = which_led;
@@ -1362,6 +1370,7 @@ static xproto_table_t PROTO_TABLE(BRI_NT) = {
.card_tick = BRI_card_tick,
.card_pcm_fromspan = BRI_card_pcm_fromspan,
.card_pcm_tospan = BRI_card_pcm_tospan,
+ .card_ioctl = BRI_card_ioctl,
.card_close = BRI_card_close,
.card_register_reply = BRI_card_register_reply,
@@ -1507,12 +1516,13 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
char *p;
reg_cmd_t regcmd;
xbus_t *xbus;
- int ret;
+ int ret = -EINVAL;
struct BRI_priv_data *priv;
byte buf[MAX_PROC_WRITE];
BUG_ON(!xpd);
xbus = xpd->xbus;
+ BUG_ON(!xbus);
priv = xpd->priv;
BUG_ON(!priv);
if((p = strchr(cmdline, '#')) != NULL) /* Truncate comments */
@@ -1524,6 +1534,10 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
if(*p == '\0')
return 0;
+ if(!XBUS_GET(xbus)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
+ return -EBUSY;
+ }
memset(buf, 0, MAX_PROC_WRITE);
elements = sscanf(cmdline, "%d %c%c %x %x %x %x %x",
&chipsel,
@@ -1533,11 +1547,11 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, subreg, data);
if(elements < 3) { // At least: chipsel, op, reg_type, reg_num
ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- return -EINVAL;
+ goto out;
}
if(!VALID_CHIPSEL(chipsel)) {
ERR("Bad chip select number: %d\n", chipsel);
- return -EINVAL;
+ goto out;
}
REG_FIELD(&regcmd, chipsel) = chipsel;
switch(op) {
@@ -1549,7 +1563,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown operation type '%c'\n", op);
- return -EINVAL;
+ goto out;
}
if(
(op == 'W' && reg_type == 'D' && elements != 5) ||
@@ -1560,7 +1574,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
ERR("Bad number of elements: '%s' (%d elements): %d %c%c %02X %02X %02X\n",
cmdline, elements,
chipsel, op, reg_type, reg_num, subreg, data);
- return -EINVAL;
+ goto out;
}
switch(reg_type) {
case 'S':
@@ -1579,7 +1593,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
case 'm': /* Multi with eoftx */
if(!writing) {
ERR("Read multibyte is not implemented\n");
- return -EINVAL;
+ goto out;
}
elements -= 3;
REG_XDATA(&regcmd)[0] = reg_num;
@@ -1587,18 +1601,15 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
REG_XDATA(&regcmd)[2] = data;
REG_XDATA(&regcmd)[3] = xdata1;
REG_XDATA(&regcmd)[4] = xdata2;
- return send_bri_multibyte(xpd, REG_XDATA(&regcmd), elements, (reg_type == 'm'));
+ ret = send_bri_multibyte(xpd, REG_XDATA(&regcmd), elements, (reg_type == 'm'));
+ goto out;
default:
ERR("Unkown register type '%c'\n", reg_type);
- return -EINVAL;
+ goto out;
}
regcmd.bytes = sizeof(regcmd) - 1;
REG_FIELD(&regcmd, read_request) = writing;
REG_FIELD(&regcmd, data_high) = 0;
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is in_use\n");
- return -EBUSY;
- }
priv->requested_reply = regcmd;
if(print_dbg)
dump_reg_cmd("BRI", &regcmd, 1);
@@ -1610,7 +1621,8 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
REG_FIELD(&regcmd, subreg),
REG_FIELD(&regcmd, data_low),
REG_FIELD(&regcmd, data_high));
- up_read(&xbus->in_use);
+out:
+ XBUS_PUT(xbus);
return ret;
}
diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c
index 404407f..513cd5b 100644
--- a/xpp/card_fxo.c
+++ b/xpp/card_fxo.c
@@ -34,7 +34,8 @@
static const char rcsid[] = "$Id$";
DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements");
-DEF_PARM(uint, poll_battery_interval, 40, 0644, "Poll battery interval in milliseconds (0 - disable)");
+DEF_PARM(uint, poll_battery_interval, 500, 0644, "Poll battery interval in milliseconds (0 - disable)");
+DEF_PARM(uint, poll_power_denial_interval, 40, 0644, "Power denial detection poll interval in milliseconds (0 - disable)");
#ifdef WITH_METERING
DEF_PARM(uint, poll_metering_interval, 500, 0644, "Poll metering interval in milliseconds (0 - disable)");
#endif
@@ -54,8 +55,10 @@ enum fxo_leds {
#define NUM_LEDS 1
#define DELAY_UNTIL_DIALTONE 3000
+#define POLREV_START 3 /* time after offhook to ignore polarity reversals (in ticks) */
+#define POLREV_THRESHOLD 1000 /* minimum duration for polarity reversal detection (in ticks) */
#define BAT_THRESHOLD 3
-#define BAT_DEBOUNCE 3 /* compensate for battery voltage fluctuation (in poll_battery_interval's) */
+#define BAT_DEBOUNCE 1000 /* compensate for battery voltage fluctuation (in ticks) */
/* Shortcuts */
#define DAA_WRITE 1
@@ -87,9 +90,10 @@ static int handle_register_command(xpd_t *xpd, char *cmdline);
#define PROC_METERING_FNAME "metering_read"
#endif
-#define DAA_RING_REGISTER 0x05
-#define DAA_METERING_REGISTER 0x11 /* 17 */
-#define DAA_CURRENT_REGISTER 0x1C /* 28 */
+#define DAA_REG_RING 0x05
+#define DAA_REG_METERING 0x11 /* 17 */
+#define DAA_REG_CURRENT 0x1C /* 28 */
+#define DAA_REG_VBAT 0x1D /* 29 */
#define POWER_DENIAL_CURRENT 3
#define POWER_DENIAL_TIME 80 /* ticks */
@@ -211,7 +215,7 @@ static void update_zap_ring(xpd_t *xpd, int pos, bool on)
BIT_SET(xpd->cid_on, pos);
rxsig = ZT_RXSIG_OFFHOOK;
}
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
/*
* We should not spinlock before calling zt_hooksig() as
* it may call back into our xpp_hooksig() and cause
@@ -228,6 +232,11 @@ static void mark_ring(xpd_t *xpd, lineno_t pos, bool on, bool update_zap)
priv = xpd->priv;
BUG_ON(!priv);
atomic_set(&priv->ring_debounce[pos], 0); /* Stop debouncing */
+ /*
+ * We don't want to check battery during ringing
+ * due to voltage fluctuations.
+ */
+ priv->battery_debounce[pos] = 0;
if(on && !xpd->ringing[pos]) {
LINE_DBG(SIGNAL, xpd, pos, "START\n");
xpd->ringing[pos] = 1;
@@ -268,7 +277,7 @@ static int do_sethook(xpd_t *xpd, int pos, bool to_offhook)
MARK_ON(priv, pos, LED_GREEN);
else
MARK_OFF(priv, pos, LED_GREEN);
- ret = DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, DAA_RING_REGISTER, value);
+ ret = DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, DAA_REG_RING, value);
if(to_offhook) {
BIT_SET(xpd->offhook, pos);
priv->offhook_timestamp[pos] = priv->poll_counter;
@@ -279,7 +288,7 @@ static int do_sethook(xpd_t *xpd, int pos, bool to_offhook)
#ifdef WITH_METERING
priv->metering_count[pos] = 0;
priv->metering_tone_state = 0L;
- DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, DAA_METERING_REGISTER, 0x2D);
+ DAA_DIRECT_REQUEST(xbus, xpd, pos, DAA_WRITE, DAA_REG_METERING, 0x2D);
#endif
spin_unlock_irqrestore(&xpd->lock, flags);
return ret;
@@ -393,7 +402,7 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
do_led(xpd, i, LED_GREEN, 0);
msleep(50);
}
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
return 0;
err:
clean_proc(xbus, xpd);
@@ -485,7 +494,7 @@ static int FXO_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
txsig2str(txsig), txsig);
return -EINVAL;
}
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
return 0;
}
@@ -511,7 +520,7 @@ static void poll_battery(xbus_t *xbus, xpd_t *xpd)
int i;
for_each_line(xpd, i) {
- DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_VBAT_REGISTER, 0);
+ DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_REG_VBAT, 0);
}
}
@@ -521,7 +530,7 @@ static void poll_current(xbus_t *xbus, xpd_t *xpd)
for_each_line(xpd, i) {
if (IS_SET(xpd->offhook, i))
- DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_CURRENT_REGISTER, 0);
+ DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_REG_CURRENT, 0);
}
}
@@ -532,7 +541,7 @@ static void poll_metering(xbus_t *xbus, xpd_t *xpd)
for_each_line(xpd, i) {
if (IS_SET(xpd->offhook, i))
- DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_METERING_REGISTER, 0);
+ DAA_DIRECT_REQUEST(xbus, xpd, i, DAA_READ, DAA_REG_METERING, 0);
}
}
#endif
@@ -563,10 +572,10 @@ static int FXO_card_tick(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(poll_battery_interval != 0 && (priv->poll_counter % poll_battery_interval) == 0) {
+ if(poll_battery_interval != 0 && (priv->poll_counter % poll_battery_interval) == 0)
poll_battery(xbus, xpd);
+ if(poll_power_denial_interval != 0 && (priv->poll_counter % poll_power_denial_interval) == 0)
poll_current(xbus, xpd);
- }
#ifdef WITH_METERING
if(poll_metering_interval != 0 && (priv->poll_counter % poll_metering_interval) == 0)
poll_metering(xbus, xpd);
@@ -592,7 +601,7 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
unsigned char echotune_data[ARRAY_SIZE(echotune_regs)];
BUG_ON(!xpd);
- if(!xpd->xbus->hardware_exists)
+ if(!TRANSPORT_RUNNING(xpd->xbus))
return -ENODEV;
switch (cmd) {
case WCTDM_SET_ECHOTUNE:
@@ -614,8 +623,16 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
XPD_DBG(GENERAL, xpd, "-- Set echo registers successfully\n");
break;
+ case ZT_TONEDETECT:
+ /*
+ * Asterisk call all span types with this (FXS specific)
+ * call. Silently ignore it.
+ */
+ LINE_DBG(GENERAL, xpd, pos,
+ "ZT_TONEDETECT (FXO: NOTIMPLEMENTED)\n");
+ return -ENOTTY;
default:
- LINE_DBG(GENERAL, xpd, pos, "Unknown command 0x%X.\n", cmd);
+ report_bad_ioctl(THIS_MODULE->name, xpd, pos, cmd);
return -ENOTTY;
}
return 0;
@@ -704,11 +721,17 @@ static void update_battery_status(xpd_t *xpd, byte data_low, lineno_t chipsel)
/*
* Check for battery voltage fluctuations
*/
- if(IS_SET(priv->battery, chipsel) && priv->battery_debounce[chipsel]++ > BAT_DEBOUNCE) {
- LINE_DBG(SIGNAL, xpd, chipsel, "BATTERY OFF voltage=%d\n", bat);
- BIT_CLR(priv->battery, chipsel);
- if(SPAN_REGISTERED(xpd))
- zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_ALARM);
+ if(IS_SET(priv->battery, chipsel)) {
+ int milliseconds;
+
+ milliseconds = priv->battery_debounce[chipsel]++ *
+ poll_battery_interval;
+ if(milliseconds > BAT_DEBOUNCE) {
+ LINE_DBG(SIGNAL, xpd, chipsel, "BATTERY OFF voltage=%d\n", bat);
+ BIT_CLR(priv->battery, chipsel);
+ if(SPAN_REGISTERED(xpd))
+ zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_ALARM);
+ }
}
} else {
@@ -724,23 +747,24 @@ static void update_battery_status(xpd_t *xpd, byte data_low, lineno_t chipsel)
* Handle reverse polarity
*/
if (IS_SET(xpd->offhook, chipsel)) { /* Learn the current polarity */
- if (priv->poll_counter - priv->offhook_timestamp[chipsel] < 3) {
+ if (priv->poll_counter - priv->offhook_timestamp[chipsel] < POLREV_START) {
priv->polarity_counter[chipsel] = 0;
if (pol)
BIT_SET(priv->polarity, chipsel);
else
BIT_CLR(priv->polarity, chipsel);
- }
- else if (IS_SET(priv->polarity, chipsel) != pol) { /* Polarity has reversed */
- priv->polarity_counter[chipsel]++;
- if (priv->polarity_counter[chipsel] >= 2) {
+ } else if (IS_SET(priv->polarity, chipsel) != pol) { /* Polarity has reversed */
+ int milliseconds;
+
+ milliseconds = priv->polarity_counter[chipsel]++ * poll_battery_interval;
+ if (milliseconds >= POLREV_THRESHOLD) {
if (pol)
BIT_SET(priv->polarity, chipsel);
else
BIT_CLR(priv->polarity, chipsel);
priv->polarity_counter[chipsel] = 0;
/* Inform Zaptel */
- LINE_DBG(GENERAL, xpd, chipsel, "Send ZT_EVENT_POLARITY\n");
+ LINE_DBG(SIGNAL, xpd, chipsel, "Send ZT_EVENT_POLARITY\n");
zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_POLARITY);
#if 0
/*
@@ -752,7 +776,7 @@ static void update_battery_status(xpd_t *xpd, byte data_low, lineno_t chipsel)
*/
do_sethook(xpd, chipsel, 0);
update_line_status(xpd, chipsel, 0);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
#endif
}
}
@@ -773,7 +797,7 @@ static void update_power_denial(xpd_t *xpd, byte data_low, lineno_t chipsel)
priv->current_counter[chipsel] = 0;
do_sethook(xpd, chipsel, 0);
update_line_status(xpd, chipsel, 0);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
}
} else
priv->current_counter[chipsel] = 0;
@@ -803,7 +827,7 @@ static void update_metering_state(xpd_t *xpd, byte data_low, lineno_t chipsel)
if(metering_tone) {
/* Clear the BTD bit */
data_low &= ~BTD_BIT;
- DAA_DIRECT_REQUEST(xpd->xbus, xpd, chipsel, DAA_WRITE, DAA_METERING_REGISTER, data_low);
+ DAA_DIRECT_REQUEST(xpd->xbus, xpd, chipsel, DAA_WRITE, DAA_REG_METERING, data_low);
}
}
#endif
@@ -817,14 +841,14 @@ static int FXO_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
BUG_ON(!priv);
chipsel = REG_FIELD(info, chipsel);
switch(REG_FIELD(info, regnum)) {
- case DAA_VBAT_REGISTER:
+ case DAA_REG_VBAT:
update_battery_status(xpd, REG_FIELD(info, data_low), chipsel);
break;
- case DAA_CURRENT_REGISTER:
+ case DAA_REG_CURRENT:
update_power_denial(xpd, REG_FIELD(info, data_low), chipsel);
break;
#ifdef WITH_METERING
- case DAA_METERING_REGISTER:
+ case DAA_REG_METERING:
update_metering_state(xpd, REG_FIELD(info, data_low), chipsel);
break;
#endif
@@ -927,6 +951,10 @@ static int proc_fxo_info_read(char *page, char **start, off_t off, int count, in
for_each_line(xpd, i) {
len += sprintf(page + len, "%2d ", IS_SET(priv->polarity, i));
}
+ len += sprintf(page + len, "\n\t%-17s: ", "polarity_counter");
+ for_each_line(xpd, i) {
+ len += sprintf(page + len, "%2d ", priv->polarity_counter[i]);
+ }
#ifdef WITH_METERING
len += sprintf(page + len, "\n\t%-17s: ", "metering");
for_each_line(xpd, i) {
@@ -976,7 +1004,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
char *p;
reg_cmd_t regcmd;
xbus_t *xbus;
- int ret;
+ int ret = -EINVAL;
BUG_ON(!xpd);
xbus = xpd->xbus;
@@ -989,6 +1017,10 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
if(*p == '\0')
return 0;
+ if(!XBUS_GET(xbus)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
+ return -EBUSY;
+ }
elements = sscanf(cmdline, "%d %c%c %x %x",
&chipsel,
&op, &reg_type, &reg_num,
@@ -996,11 +1028,11 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, data_low);
if(elements < 4) { // At least: chipsel, op, reg_type, reg_num
ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- return -EINVAL;
+ goto out;
}
if(!VALID_CHIPSEL(chipsel)) {
ERR("Bad chipsel number: %d\n", chipsel);
- return -EINVAL;
+ goto out;
}
REG_FIELD(&regcmd, chipsel) = chipsel;
REG_FIELD(&regcmd, do_subreg) = 0;
@@ -1013,7 +1045,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown operation type '%c'\n", op);
- return -EINVAL;
+ goto out;
}
switch(reg_type) {
case 'D':
@@ -1022,7 +1054,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown register type '%c'\n", reg_type);
- return -EINVAL;
+ goto out;
}
if(
(op == 'W' && reg_type == 'D' && elements != 5) ||
@@ -1031,21 +1063,18 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
ERR("%s: '%s' (%d elements): %d %c%c %02X %02X\n", __FUNCTION__,
cmdline, elements,
chipsel, op, reg_type, reg_num, data_low);
- return -EINVAL;
+ goto out;
}
regcmd.bytes = sizeof(regcmd) - 1;
REG_FIELD(&regcmd, data_low) = data_low;
REG_FIELD(&regcmd, data_high) = 0;
REG_FIELD(&regcmd, read_request) = writing;
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is in_use\n");
- return -EBUSY;
- }
xpd->requested_reply = regcmd;
if(print_dbg)
dump_reg_cmd("FXO", &regcmd, 1);
ret = DAA_DIRECT_REQUEST(xpd->xbus, xpd, REG_FIELD(&regcmd, chipsel), writing, REG_FIELD(&regcmd, regnum), REG_FIELD(&regcmd, data_low));
- up_read(&xbus->in_use);
+out:
+ XBUS_PUT(xbus);
return ret;
}
diff --git a/xpp/card_fxo.h b/xpp/card_fxo.h
index 0e76bed..4d0bd25 100644
--- a/xpp/card_fxo.h
+++ b/xpp/card_fxo.h
@@ -42,6 +42,4 @@ DEF_RPACKET_DATA(FXO, SIG_CHANGED,
xpp_line_t sig_toggles; /* channels: lsb=1, msb=8 */
);
-#define DAA_VBAT_REGISTER 29
-
#endif /* CARD_FXO_H */
diff --git a/xpp/card_fxs.c b/xpp/card_fxs.c
index e7a4474..f2251e0 100644
--- a/xpp/card_fxs.c
+++ b/xpp/card_fxs.c
@@ -91,7 +91,8 @@ enum fxs_state {
/*
* DTMF detection
*/
-#define DTMF_REGISTER 0x18 /* 24 */
+#define SLIC_REG_DTMF 0x18 /* 24 */
+#define SLIC_REG_VOLTAGE 0x42 /* 66 */
/*---------------- FXS Protocol Commands ----------------------------------*/
@@ -126,6 +127,8 @@ struct FXS_priv_data {
xpp_line_t search_fsk_pattern;
xpp_line_t found_fsk_pattern;
xpp_line_t update_offhook_state;
+ xpp_line_t want_dtmf_events; /* what zaptel want */
+ xpp_line_t want_dtmf_mute; /* what zaptel want */
int led_counter[NUM_LEDS][CHANNELS_PERXPD];
int ohttimer[CHANNELS_PERXPD];
#define OHT_TIMER 6000 /* How long after RING to retain OHT */
@@ -163,7 +166,7 @@ static int do_chan_power(xbus_t *xbus, xpd_t *xpd, lineno_t chan, bool on)
BUG_ON(!xbus);
BUG_ON(!xpd);
LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on) ? "up" : "down");
- return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, 0x42, value);
+ return SLIC_DIRECT_REQUEST(xbus, xpd, chan, SLIC_WRITE, SLIC_REG_VOLTAGE, value);
}
/*
@@ -421,7 +424,7 @@ static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
msleep(50);
}
restore_leds(xpd);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
return 0;
err:
clean_proc(xbus, xpd);
@@ -499,12 +502,25 @@ static int FXS_card_zaptel_postregistration(xpd_t *xpd, bool on)
return 0;
}
+/*
+ * Called with XPD spinlocked
+ */
+static void __do_mute_dtmf(xpd_t *xpd, int pos, bool muteit)
+{
+ LINE_DBG(SIGNAL, xpd, pos, "%s\n", (muteit) ? "MUTE" : "UNMUTE");
+ if(muteit)
+ BIT_SET(xpd->mute_dtmf, pos);
+ else
+ BIT_CLR(xpd->mute_dtmf, pos);
+}
+
static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
{
struct FXS_priv_data *priv;
int ret = 0;
struct zt_chan *chan = NULL;
enum fxs_state txhook;
+ unsigned long flags;
LINE_DBG(SIGNAL, xpd, pos, "%s\n", txsig2str(txsig));
priv = xpd->priv;
@@ -517,10 +533,15 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
chan = &xpd->span.chans[pos];
switch(txsig) {
case ZT_TXSIG_ONHOOK:
+ spin_lock_irqsave(&xpd->lock, flags);
xpd->ringing[pos] = 0;
BIT_CLR(xpd->cid_on, pos);
BIT_CLR(priv->search_fsk_pattern, pos);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ BIT_CLR(priv->want_dtmf_events, pos);
+ BIT_CLR(priv->want_dtmf_mute, pos);
+ __do_mute_dtmf(xpd, pos, 0);
+ __pcm_recompute(xpd, 0); /* already spinlocked */
+ spin_unlock_irqrestore(&xpd->lock, flags);
if(IS_SET(xpd->digital_outputs, pos)) {
LINE_DBG(SIGNAL, xpd, pos, "digital output OFF\n");
ret = CALL_XMETHOD(RELAY_OUT, xpd->xbus, xpd, pos-8, 0);
@@ -557,7 +578,7 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
txhook = priv->lasttxhook[pos];
if(xpd->ringing[pos]) {
BIT_SET(xpd->cid_on, pos);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
txhook = FXS_LINE_OHTRANS;
}
xpd->ringing[pos] = 0;
@@ -577,7 +598,7 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
xpd->ringing[pos] = 1;
BIT_CLR(xpd->cid_on, pos);
BIT_CLR(priv->search_fsk_pattern, pos);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
if(IS_SET(xpd->digital_outputs, pos)) {
LINE_DBG(SIGNAL, xpd, pos, "%s digital output ON\n", txsig2str(txsig));
ret = CALL_XMETHOD(RELAY_OUT, xpd->xbus, xpd, pos-8, 1);
@@ -607,13 +628,14 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
struct FXS_priv_data *priv;
xbus_t *xbus;
int val;
+ unsigned long flags;
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
xbus = xpd->xbus;
BUG_ON(!xbus);
- if(!xbus->hardware_exists)
+ if(!TRANSPORT_RUNNING(xbus))
return -ENODEV;
if (pos < 0 || pos >= xpd->channels) {
XPD_NOTICE(xpd, "Bad channel number %d in %s(), cmd=%u\n",
@@ -634,7 +656,7 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
priv->ohttimer[pos] = OHT_TIMER;
priv->idletxhookstate[pos] = FXS_LINE_POL_OHTRANS;
BIT_SET(priv->search_fsk_pattern, pos);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on | priv->search_fsk_pattern);
+ pcm_recompute(xpd, priv->search_fsk_pattern);
}
if(!IS_SET(xpd->offhook, pos))
start_stop_vm_led(xbus, xpd, pos);
@@ -643,24 +665,61 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
if (get_user(val, (int __user *)arg))
return -EFAULT;
LINE_DBG(SIGNAL, xpd, pos, "ZT_TONEDETECT: %s %s (dtmf_detection=%s)\n",
- (val & ZT_TONEDETECT_ON) ? "ON" : "OFF",
- (val & ZT_TONEDETECT_MUTE) ? "MUTE" : "NO-MUTE",
- (dtmf_detection ? "YES" : "NO"));
+ (val & ZT_TONEDETECT_ON) ? "ON" : "OFF",
+ (val & ZT_TONEDETECT_MUTE) ? "MUTE" : "NO-MUTE",
+ (dtmf_detection ? "YES" : "NO"));
if(!dtmf_detection) {
- SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x17, 0);
+ spin_lock_irqsave(&xpd->lock, flags);
+ if(IS_SET(priv->want_dtmf_events, pos)) {
+ /* Detection mode changed: Disable DTMF interrupts */
+ SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x17, 0);
+ }
+ BIT_CLR(priv->want_dtmf_events, pos);
+ BIT_CLR(priv->want_dtmf_mute, pos);
+ __do_mute_dtmf(xpd, pos, 0);
+ __pcm_recompute(xpd, 0); /* already spinlocked */
+ spin_unlock_irqrestore(&xpd->lock, flags);
return -ENOTTY;
+ }
+ /*
+ * During natively bridged calls, Asterisk
+ * will request one of the sides to stop sending
+ * dtmf events. Check the requested state.
+ */
+ spin_lock_irqsave(&xpd->lock, flags);
+ if(val & ZT_TONEDETECT_ON) {
+ if(!IS_SET(priv->want_dtmf_events, pos)) {
+ /* Detection mode changed: Enable DTMF interrupts */
+ LINE_DBG(SIGNAL, xpd, pos,
+ "ZT_TONEDETECT: Enable Hardware DTMF\n");
+ SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x17, 1);
+ }
+ BIT_SET(priv->want_dtmf_events, pos);
} else {
- /* Enable DTMF interrupts (XPD will notify when DTMF will be detected) */
- SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x17, 1);
- return 0;
+ if(IS_SET(priv->want_dtmf_events, pos)) {
+ /* Detection mode changed: Disable DTMF interrupts */
+ LINE_DBG(SIGNAL, xpd, pos,
+ "ZT_TONEDETECT: Disable Hardware DTMF\n");
+ SLIC_DIRECT_REQUEST(xbus, xpd, pos, SLIC_WRITE, 0x17, 0);
+ }
+ BIT_CLR(priv->want_dtmf_events, pos);
}
+ if(val & ZT_TONEDETECT_MUTE) {
+ BIT_SET(priv->want_dtmf_mute, pos);
+ } else {
+ BIT_CLR(priv->want_dtmf_mute, pos);
+ __do_mute_dtmf(xpd, pos, 0);
+ __pcm_recompute(xpd, 0);
+ }
+ spin_unlock_irqrestore(&xpd->lock, flags);
+ return 0;
case ZT_SETPOLARITY:
if (get_user(val, (int __user *)arg))
return -EFAULT;
/* Can't change polarity while ringing or when open */
if (priv->lasttxhook[pos] == FXS_LINE_RING || priv->lasttxhook[pos] == FXS_LINE_OPEN) {
LINE_ERR(xpd, pos, "ZT_SETPOLARITY: %s Cannot change when lasttxhook=0x%X\n",
- (val)?"ON":"OFF", priv->lasttxhook[pos]);
+ (val)?"ON":"OFF", priv->lasttxhook[pos]);
return -EINVAL;
}
LINE_DBG(SIGNAL, xpd, pos, "ZT_SETPOLARITY: %s\n", (val)?"ON":"OFF");
@@ -687,6 +746,8 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
BIT_CLR(xpd->msg_waiting, pos);
return 0;
#endif
+ default:
+ report_bad_ioctl(THIS_MODULE->name, xpd, pos, cmd);
}
return -ENOTTY;
}
@@ -820,7 +881,7 @@ static void handle_linefeed(xpd_t *xpd)
/* Apply the change if appropriate */
BIT_CLR(xpd->cid_on, i);
BIT_CLR(priv->search_fsk_pattern, i);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on);
+ pcm_recompute(xpd, 0);
linefeed_control(xpd->xbus, xpd, i, txhook);
}
}
@@ -1050,8 +1111,8 @@ HANDLER_DEF(FXS, SIG_CHANGED)
}
}
}
+ __pcm_recompute(xpd, 0); /* in a spinlock */
spin_unlock_irqrestore(&xpd->lock, flags);
- pcm_recompute(xpd, xpd->offhook | xpd->cid_on); /* it's spinlocked */
return 0;
}
@@ -1086,15 +1147,18 @@ static const char dtmf_digits[] = {
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', '#', 'A', 'B', 'C', 'D'
};
-static void process_dtmf(xpd_t *xpd, const reg_cmd_t *info)
+/*
+ * This function is called with spinlocked XPD
+ */
+static void process_dtmf(xpd_t *xpd, xpp_line_t lines, byte val)
{
- int i;
- byte val = REG_FIELD(info, data_low);
- xpp_line_t lines = BIT(REG_FIELD(info, chipsel));
- byte digit;
- bool is_down = val & 0x10;
+ int i;
+ byte digit;
+ bool is_down = val & 0x10;
struct FXS_priv_data *priv;
+ if(!dtmf_detection)
+ return;
priv = xpd->priv;
val &= 0xF;
if(val <= 0) {
@@ -1106,17 +1170,32 @@ static void process_dtmf(xpd_t *xpd, const reg_cmd_t *info)
digit = dtmf_digits[val];
for_each_line(xpd, i) {
if(IS_SET(lines, i)) {
- if(dtmf_detection) {
- LINE_DBG(SIGNAL, xpd, i, "DTMF digit %s (val=%d) '%c'\n",
- (is_down)?"DOWN":"UP", val, digit);
- if(is_down) {
- BIT_SET(xpd->mute_dtmf, i);
- zt_qevent_lock(&xpd->chans[i], ZT_EVENT_DTMFDOWN | digit);
- } else {
- zt_qevent_lock(&xpd->chans[i], ZT_EVENT_DTMFUP | digit);
- BIT_CLR(xpd->mute_dtmf, i);
- }
+ int event = (is_down) ? ZT_EVENT_DTMFDOWN : ZT_EVENT_DTMFUP;
+ bool want_mute = IS_SET(priv->want_dtmf_mute, i);
+ bool want_event = IS_SET(priv->want_dtmf_events, i);
+
+ if(want_event) {
+ LINE_DBG(SIGNAL, xpd, i,
+ "DTMF digit %s (val=%d) '%c' (want_mute=%s)\n",
+ (is_down)?"DOWN":"UP", val, digit,
+ (want_mute) ? "yes" : "no");
+ } else {
+ LINE_DBG(SIGNAL, xpd, i,
+ "Ignored DTMF digit %s '%c'\n",
+ (is_down)?"DOWN":"UP", digit);
}
+ /*
+ * FIXME: we currently don't use the want_dtmf_mute until
+ * we are sure about the logic in Asterisk native bridging.
+ * Meanwhile, simply mute it on button press.
+ */
+ if(is_down && want_mute)
+ __do_mute_dtmf(xpd, i, 1);
+ else
+ __do_mute_dtmf(xpd, i, 0);
+ __pcm_recompute(xpd, 0); /* XPD is locked */
+ if(want_event)
+ zt_qevent_lock(&xpd->chans[i], event | digit);
break;
}
}
@@ -1144,8 +1223,16 @@ static int FXS_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
*/
if(xpd->xbus_idx == 0 && !indirect && regnum == 0x06)
process_digital_inputs(xpd, info);
- if(!indirect && regnum == DTMF_REGISTER)
- process_dtmf(xpd, info);
+ if(!indirect && regnum == SLIC_REG_DTMF) {
+ byte val = REG_FIELD(info, data_low);
+ xpp_line_t lines = BIT(REG_FIELD(info, chipsel));
+
+#if 0
+ XPD_DBG(SIGNAL, xpd, "DTMF result lines=0x%04X val=%d\n",
+ lines, val);
+#endif
+ process_dtmf(xpd, lines, val);
+ }
out:
/* Update /proc info only if reply relate to the last slic read request */
if(
@@ -1305,7 +1392,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
char *p;
reg_cmd_t regcmd;
xbus_t *xbus;
- int ret;
+ int ret = -EINVAL;
BUG_ON(!xpd);
xbus = xpd->xbus;
@@ -1317,7 +1404,10 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
;
if(*p == '\0')
return 0;
-
+ if(!XBUS_GET(xbus)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
+ return -EBUSY;
+ }
elements = sscanf(cmdline, "%d %c%c %x %x %x",
&chipsel,
&op, &reg_type, &reg_num,
@@ -1326,11 +1416,11 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
XPD_DBG(REGS, xpd, "'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, data_low, data_high);
if(elements < 4) { // At least: chipsel, op, reg_type, reg_num
ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- return -EINVAL;
+ goto out;
}
if(!VALID_CHIPSEL(chipsel)) {
ERR("Bad chipsel number: %d\n", chipsel);
- return -EINVAL;
+ goto out;
}
REG_FIELD(&regcmd, chipsel) = chipsel;
switch(op) {
@@ -1342,7 +1432,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown operation type '%c'\n", op);
- return -EINVAL;
+ goto out;
}
switch(reg_type) {
case 'I':
@@ -1357,7 +1447,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown register type '%c'\n", reg_type);
- return -EINVAL;
+ goto out;
}
if(
(op == 'W' && reg_type == 'D' && elements != 5) ||
@@ -1368,16 +1458,12 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
ERR("%s: '%s' (%d elements): %d %c%c %02X %02X %02X\n", __FUNCTION__,
cmdline, elements,
chipsel, op, reg_type, reg_num, data_low, data_high);
- return -EINVAL;
+ goto out;
}
regcmd.bytes = sizeof(regcmd) - 1;
REG_FIELD(&regcmd, data_low) = data_low;
REG_FIELD(&regcmd, data_high) = data_high;
REG_FIELD(&regcmd, read_request) = writing;
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is in_use\n");
- return -EBUSY;
- }
xpd->requested_reply = regcmd;
if(print_dbg)
dump_reg_cmd("FXS", &regcmd, 1);
@@ -1389,7 +1475,8 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
REG_FIELD(&regcmd, subreg),
REG_FIELD(&regcmd, data_low),
REG_FIELD(&regcmd, data_high));
- up_read(&xbus->in_use);
+out:
+ XBUS_PUT(xbus);
return ret;
}
diff --git a/xpp/card_global.c b/xpp/card_global.c
index 2a8bdd8..a2c4ac0 100644
--- a/xpp/card_global.c
+++ b/xpp/card_global.c
@@ -34,7 +34,6 @@ static const char rcsid[] = "$Id$";
DEF_PARM(charp,initdir, "/usr/share/zaptel", 0644, "The directory of card initialization scripts");
extern int print_dbg;
-static bool pcm_valid(xpd_t *xpd, xpacket_t *pack);
/*---------------- GLOBAL Protocol Commands -------------------------------*/
@@ -53,7 +52,7 @@ static void global_packet_dump(const char *msg, xpacket_t *pack);
DBG(GENERAL, "NO XBUS\n");
return -EINVAL;
}
- XFRAME_NEW(xframe, pack, xbus, GLOBAL, DESC_REQ, xpd_num);
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, DESC_REQ, xpd_num);
XBUS_DBG(GENERAL, xbus, "to %1d%1d\n", XBUS_UNIT(xpd_num), XBUS_SUBUNIT(xpd_num));
ret = send_cmd_frame(xbus, xframe);
XBUS_COUNTER(xbus, DESC_REQ)++;
@@ -72,7 +71,7 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd,
DBG(REGS, "NO XBUS\n");
return -EINVAL;
}
- XFRAME_NEW(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
LINE_DBG(REGS, xpd, chipsel, "%c%c R%02X S%02X %02X %02X\n",
(writing)?'W':'R',
(do_subreg)?'S':'D',
@@ -97,10 +96,15 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd,
{
xframe_t *xframe;
xpacket_t *pack;
+ const char *mode_name;
BUG_ON(!xbus);
- XBUS_DBG(SYNC, xbus, "mode=0x%X drift=%d\n", mode, drift);
- XFRAME_NEW(xframe, pack, xbus, GLOBAL, SYNC_SOURCE, 0);
+ if((mode_name = sync_mode_name(mode)) == NULL) {
+ XBUS_ERR(xbus, "SYNC_SOURCE: bad sync_mode=0x%X\n", mode);
+ return -EINVAL;
+ }
+ XBUS_DBG(SYNC, xbus, "%s (0x%X), drift=%d\n", mode_name, mode, drift);
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, SYNC_SOURCE, 0);
RPACKET_FIELD(pack, GLOBAL, SYNC_SOURCE, sync_mode) = mode;
RPACKET_FIELD(pack, GLOBAL, SYNC_SOURCE, drift) = drift;
send_cmd_frame(xbus, xframe);
@@ -113,8 +117,8 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd,
xpacket_t *pack;
BUG_ON(!xbus);
- XBUS_DBG(SYNC, xbus, "\n");
- XFRAME_NEW(xframe, pack, xbus, GLOBAL, RESET_SYNC_COUNTERS, 0);
+ //XBUS_DBG(SYNC, xbus, "\n");
+ XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, RESET_SYNC_COUNTERS, 0);
RPACKET_FIELD(pack, GLOBAL, RESET_SYNC_COUNTERS, mask) = 0x10;
send_cmd_frame(xbus, xframe);
return 0;
@@ -170,81 +174,20 @@ HANDLER_DEF(GLOBAL, REGISTER_REPLY)
return CALL_XMETHOD(card_register_reply, xbus, xpd, reg);
}
-HANDLER_DEF(GLOBAL, PCM_READ)
-{
- struct xpd_addr addr = RPACKET_FIELD(pack, GLOBAL, PCM_READ, head.addr);
- struct timeval now;
- unsigned long sec_diff;
- unsigned long usec_diff;
-
- BUG_ON(!xbus);
- /*
- * FIXME:
- * Only calculate PCM statistics for unit==0, otherwise the data
- * of the PCM packets in the same xframe would clobber each other.
- *
- * This is just a workaround, since the true solution is to handle
- * each PCM frame separately (once the firmware guarantee that PCM
- * frames contain only PCM packets).
- *
- * On PRI we must fix this since the PCM is transmitted in two frames
- * and the following workaround only accounts for the first one.
- */
- if(addr.unit == 0) {
- do_gettimeofday(&now);
- sec_diff = now.tv_sec - xbus->last_rx_sync.tv_sec;
- usec_diff = sec_diff * 1000000 + (now.tv_usec - xbus->last_rx_sync.tv_usec);
- if(unlikely(abs(sec_diff) > 2)) {
- XBUS_DBG(SYNC, xbus, "PCM RX timing restart (sec_diff=%ld)\n", sec_diff);
- } else {
- if(abs(usec_diff - 1000) > TICK_TOLERANCE) {
- static int rate_limit;
-
- if((rate_limit++ % 5003) == 0)
- XBUS_DBG(SYNC, xbus, "Bad PCM RX timing(%d): usec_diff=%ld.\n",
- rate_limit, usec_diff);
- }
- if(usec_diff > xbus->max_rx_sync)
- xbus->max_rx_sync = usec_diff;
- if(usec_diff < xbus->min_rx_sync)
- xbus->min_rx_sync = usec_diff;
- }
- xbus->last_rx_sync = now;
- }
- if(!xpd) {
-#if 0
- notify_bad_xpd(__FUNCTION__, xbus, pack->addr, cmd->name);
-#endif
- return -EPROTO;
- }
- if(!pcm_valid(xpd, pack))
- return -EPROTO;
- XBUS_COUNTER(xbus, RX_PACK_PCM)++;
- CALL_XMETHOD(card_pcm_tospan, xbus, xpd, pack);
- flip_parport_bit(2);
- /*
- * Firmware marks the sync packets.
- * This is out of the loop, so we don't send multiple times
- * for BRI subunits.
- */
- if(addr.sync_master)
- got_sync_from(xpd);
- return 0;
-}
-
HANDLER_DEF(GLOBAL, SYNC_REPLY)
{
- byte mode = RPACKET_FIELD(pack, GLOBAL, SYNC_REPLY, sync_mode);
- byte drift = RPACKET_FIELD(pack, GLOBAL, SYNC_REPLY, drift);
+ byte mode = RPACKET_FIELD(pack, GLOBAL, SYNC_REPLY, sync_mode);
+ byte drift = RPACKET_FIELD(pack, GLOBAL, SYNC_REPLY, drift);
+ const char *mode_name;
BUG_ON(!xbus);
- if(!xpd) {
- notify_bad_xpd(__FUNCTION__, xbus, XPACKET_ADDR(pack), cmd->name);
- return -EPROTO;
+ if((mode_name = sync_mode_name(mode)) == NULL) {
+ XBUS_ERR(xbus, "SYNC_REPLY: bad sync_mode=0x%X\n", mode);
+ return -EINVAL;
}
- XPD_DBG(GENERAL, xpd, "mode=0x%X drift=%d\n", mode, drift);
- dump_packet("SYNC_REPLY", pack, print_dbg);
- xbus->sync_adjustment = (signed char)drift;
+ XBUS_DBG(SYNC, xbus, "%s (0x%X), drift=%d\n", mode_name, mode, drift);
+ //dump_packet("SYNC_REPLY", pack, print_dbg & DBG_SYNC);
+ got_new_syncer(xbus, mode, drift);
return 0;
}
@@ -292,7 +235,6 @@ xproto_table_t PROTO_TABLE(GLOBAL) = {
/* Prototable Card Opcode */
XENTRY( GLOBAL, GLOBAL, NULL_REPLY ),
XENTRY( GLOBAL, GLOBAL, DEV_DESC ),
- XENTRY( GLOBAL, GLOBAL, PCM_READ ),
XENTRY( GLOBAL, GLOBAL, SYNC_REPLY ),
XENTRY( GLOBAL, GLOBAL, ERROR_CODE ),
XENTRY( GLOBAL, GLOBAL, REGISTER_REPLY ),
@@ -316,38 +258,6 @@ static void global_packet_dump(const char *msg, xpacket_t *pack)
DBG(GENERAL, "%s\n", msg);
}
-static bool pcm_valid(xpd_t *xpd, xpacket_t *pack)
-{
- xpp_line_t lines = RPACKET_FIELD(pack, GLOBAL, PCM_READ, lines);
- int i;
- int count = 0;
- uint16_t good_len;
-
- BUG_ON(!pack);
- BUG_ON(XPACKET_OP(pack) != XPROTO_NAME(GLOBAL, PCM_READ));
-/*
- * Don't use for_each_line(xpd, i) here because for BRI it will ignore the channels of the other
- * xpd's in the same unit.
- */
- for (i = 0; i < CHANNELS_PERXPD; i++)
- if(IS_SET(lines, i))
- count++;
- /* FRAMES: include opcode in calculation */
- good_len = RPACKET_HEADERSIZE + sizeof(xpp_line_t) + count * 8;
- if(XPACKET_LEN(pack) != good_len) {
- static int rate_limit = 0;
-
- XPD_COUNTER(xpd, RECV_ERRORS)++;
- if((rate_limit++ % 1000) <= 10) {
- XPD_ERR(xpd, "BAD PCM REPLY: packet_len=%d (should be %d), count=%d\n",
- XPACKET_LEN(pack), good_len, count);
- dump_packet("BAD PCM REPLY", pack, 1);
- }
- return 0;
- }
- return 1;
-}
-
#define MAX_ENV_STR 40
#define MAX_PATH_STR 60
@@ -396,7 +306,7 @@ int run_initialize_registers(xpd_t *xpd)
XPD_NOTICE(xpd, "Cannot initialize. pathname is longer than %d characters.\n", MAX_PATH_STR);
return -E2BIG;
}
- if(!down_read_trylock(&xbus->in_use)) {
+ if(!XBUS_GET(xbus)) {
XBUS_ERR(xbus, "Skipped register initialization. XBUS is going down\n");
return -ENODEV;
}
@@ -421,9 +331,10 @@ int run_initialize_registers(xpd_t *xpd)
}
ret = -EINVAL;
}
- up_read(&xbus->in_use);
+ XBUS_PUT(xbus);
return ret;
}
+EXPORT_SYMBOL(sync_mode_name);
EXPORT_SYMBOL(run_initialize_registers);
EXPORT_SYMBOL(xpp_register_request);
diff --git a/xpp/card_global.h b/xpp/card_global.h
index 1dffb2e..250f4f4 100644
--- a/xpp/card_global.h
+++ b/xpp/card_global.h
@@ -23,6 +23,7 @@
*/
#include "xdefs.h"
+#include "xbus-pcm.h"
enum global_opcodes {
XPROTO_NAME(GLOBAL, DESC_REQ) = 0x04,
@@ -81,13 +82,6 @@ DEF_RPACKET_DATA(GLOBAL, ERROR_CODE,
} info;
);
-enum sync_mode {
- SYNC_MODE_HOST = 0x00,
- SYNC_MODE_AB = 0x01, /* Astribank sync */
- SYNC_MODE_PLL = 0x03, /* Adjust XPD's PLL according to HOST */
- SYNC_MODE_QUERY = 0x80,
-};
-
/* 0x04 */ DECLARE_CMD(GLOBAL, DESC_REQ, int xpd_num);
/* 0x19 */ DECLARE_CMD(GLOBAL, SYNC_SOURCE, enum sync_mode mode, int drift);
/* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SYNC_COUNTERS);
diff --git a/xpp/card_pri.c b/xpp/card_pri.c
index 1535cc2..483fc47 100644
--- a/xpp/card_pri.c
+++ b/xpp/card_pri.c
@@ -44,7 +44,6 @@ DEF_PARM(int, pcmtx_chan, 0, 0644, "channel to force PCM value");
#endif
#define PRI_LINES_BITMASK BITMASK(31)
-#define PRI_DCHAN_NUM 16
#define PRI_DCHAN_SIGCAP ( \
ZT_SIG_EM | \
ZT_SIG_CLEAR | \
@@ -82,13 +81,75 @@ enum pri_protocol {
PRI_PROTO_T1 = 2,
PRI_PROTO_J1 = 3
};
-static const char *pri_protocol_name[] = {
- [PRI_PROTO_0] = "Unknown",
- [PRI_PROTO_E1] = "E1",
- [PRI_PROTO_T1] = "T1",
- [PRI_PROTO_J1] = "J1"
+
+static const char *pri_protocol_name(enum pri_protocol pri_protocol)
+{
+ static const char *protocol_names[] = {
+ [PRI_PROTO_0] = "Unknown",
+ [PRI_PROTO_E1] = "E1",
+ [PRI_PROTO_T1] = "T1",
+ [PRI_PROTO_J1] = "J1"
+ };
+ return protocol_names[pri_protocol];
+}
+
+static int pri_num_channels(enum pri_protocol pri_protocol)
+{
+ static int num_channels[] = {
+ [PRI_PROTO_0] = 0,
+ [PRI_PROTO_E1] = 31,
+ [PRI_PROTO_T1] = 24,
+ [PRI_PROTO_J1] = 0
+ };
+ return num_channels[pri_protocol];
+}
+
+static const char *type_name(enum pri_protocol pri_protocol, bool is_nt)
+{
+ static const char *names[2][4] = {
+ /* TE */ [0] = {
+ [PRI_PROTO_0] = "Unknown_TE",
+ [PRI_PROTO_E1] = "E1_TE",
+ [PRI_PROTO_T1] = "T1_TE",
+ [PRI_PROTO_J1] = "J1_TE"
+ },
+ /* NT */ [1] = {
+ [PRI_PROTO_0] = "Unknown_NT",
+ [PRI_PROTO_E1] = "E1_NT",
+ [PRI_PROTO_T1] = "T1_NT",
+ [PRI_PROTO_J1] = "J1_NT"
+ }
+ };
+ int term = (is_nt) ? 1 : 0;
+
+ return names[term][pri_protocol];
+}
+
+static int pri_linecompat(enum pri_protocol pri_protocol)
+{
+ static const int linecompat[] = {
+ [PRI_PROTO_0] = 0,
+ [PRI_PROTO_E1] =
+ /* coding */
+ ZT_CONFIG_CCS |
+ // CAS |
+ /* framing */
+ ZT_CONFIG_AMI | ZT_CONFIG_HDB3,
+ [PRI_PROTO_T1] =
+ /* coding */
+ // ZT_CONFIG_D4 |
+ ZT_CONFIG_ESF |
+ /* framing */
+ ZT_CONFIG_AMI | ZT_CONFIG_B8ZS,
+ [PRI_PROTO_J1] = 0
};
+ DBG(GENERAL, "pri_linecompat: pri_protocol=%d\n", pri_protocol);
+ return linecompat[pri_protocol];
+}
+
+#define PRI_DCHAN_IDX(priv) ((priv)->dchan_num - 1)
+
enum pri_led_state {
PRI_LED_OFF = 0x0,
PRI_LED_ON = 0x1,
@@ -133,6 +194,10 @@ struct pri_leds {
#define REG_LIM0_LL BIT(1) /* LL (Local Loopback) */
#define REG_FMR0 0x1C
+#define REG_FMR0_E_RC0 BIT(4) /* Receive Code - LSB */
+#define REG_FMR0_E_RC1 BIT(5) /* Receive Code - MSB */
+#define REG_FMR0_E_XC0 BIT(6) /* Transmit Code - LSB */
+#define REG_FMR0_E_XC1 BIT(7) /* Transmit Code - MSB */
#define REG_FMR1 0x1D
#define REG_FMR1_XAIS BIT(0) /* Transmit AIS toward transmit end */
@@ -140,22 +205,35 @@ struct pri_leds {
#define REG_FMR1_ECM BIT(2)
#define REG_FMR1_XFS BIT(3)
#define REG_FMR1_PMOD BIT(4) /* E1 = 0, T1/J1 = 1 */
+#define REG_FMR1_EDL BIT(5)
#define REG_FMR1_AFR BIT(6)
#define REG_FMR2 0x1E
+#define REG_FMR2_E_ALMF BIT(0) /* Automatic Loss of Multiframe */
+#define REG_FMR2_T_EXZE BIT(0) /* Excessive Zeros Detection Enable */
+#define REG_FMR2_E_AXRA BIT(1) /* Automatic Transmit Remote Alarm */
+#define REG_FMR2_T_AXRA BIT(1) /* Automatic Transmit Remote Alarm */
+#define REG_FMR2_E_PLB BIT(2) /* Payload Loop-Back */
+#define REG_FMR2_E_RFS0 BIT(6) /* Receive Framing Select - LSB */
+#define REG_FMR2_E_RFS1 BIT(7) /* Receive Framing Select - MSB */
+#define REG_FMR2_T_SSP BIT(5) /* Select Synchronization/Resynchronization Procedure */
+#define REG_FMR2_T_MCSP BIT(6) /* Multiple Candidates Synchronization Procedure */
+#define REG_FMR2_T_AFRS BIT(7) /* Automatic Force Resynchronization */
+
+#define REG_FMR4 0x20
+#define REG_FMR4_FM1 BIT(1)
#define REG_RC0 0x24
#define REG_RC0_SJR BIT(7) /* T1 = 0, J1 = 1 */
-static const char pri_name_nt[] = "PRI_NT";
-static const char pri_name_te[] = "PRI_TE";
-
struct PRI_priv_data {
bool is_nt;
struct proc_dir_entry *regfile;
struct proc_dir_entry *pri_info;
enum pri_protocol pri_protocol;
+ int deflaw;
+ unsigned int dchan_num;
bool initialized;
bool local_loopback;
reg_cmd_t requested_reply;
@@ -227,7 +305,7 @@ static xpd_t *PRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
{
xpd_t *xpd = NULL;
struct PRI_priv_data *priv;
- int channels = min(31, CHANNELS_PERXPD);
+ int channels = min(31, CHANNELS_PERXPD); /* worst case */
XBUS_DBG(GENERAL, xbus, "\n");
xpd = xpd_alloc(sizeof(struct PRI_priv_data), proto_table, channels);
@@ -235,7 +313,10 @@ static xpd_t *PRI_card_new(xbus_t *xbus, int unit, int subunit, const xproto_tab
return NULL;
priv = xpd->priv;
xpd->revision = revision;
- xpd->type_name = proto_table->name; /* Default, changes in set_nt() */
+ priv->pri_protocol = PRI_PROTO_0; /* Default, changes in set_pri_proto() */
+ priv->deflaw = ZT_LAW_DEFAULT; /* Default, changes in set_pri_proto() */
+ xpd->type_name =
+ type_name(priv->pri_protocol, 0); /* Default, changes in set_nt() */
return xpd;
}
@@ -278,9 +359,11 @@ static bool valid_pri_modes(const xpd_t *xpd)
* May only be called on unregistered xpd's
* (the span and channel description are set according to this)
*/
-static int set_pri_proto(const char *msg, xpd_t *xpd, enum pri_protocol set_proto)
+static int set_pri_proto(xpd_t *xpd, enum pri_protocol set_proto)
{
struct PRI_priv_data *priv;
+ int deflaw;
+ unsigned int dchan_num;
byte fmr1 =
REG_FMR1_AFR |
REG_FMR1_XFS |
@@ -290,17 +373,26 @@ static int set_pri_proto(const char *msg, xpd_t *xpd, enum pri_protocol set_prot
BUG_ON(!xpd);
priv = xpd->priv;
if(SPAN_REGISTERED(xpd)) {
- XPD_NOTICE(xpd, "Registered as span %d. Cannot do %s(%s)\n",
- xpd->span.spanno, __FUNCTION__, msg);
+ XPD_NOTICE(xpd, "Registered as span %d. Cannot do setup pri protocol (%s)\n",
+ xpd->span.spanno, __FUNCTION__);
return -EBUSY;
}
switch(set_proto) {
case PRI_PROTO_E1:
+ deflaw = ZT_LAW_ALAW;
+ dchan_num = 16;
break;
case PRI_PROTO_T1:
+ deflaw = ZT_LAW_MULAW;
+ dchan_num = 24;
fmr1 |= REG_FMR1_PMOD;
break;
case PRI_PROTO_J1:
+ /*
+ * Check all assumptions
+ */
+ deflaw = ZT_LAW_MULAW;
+ dchan_num = 24;
fmr1 |= REG_FMR1_PMOD;
rc0 |= REG_RC0_SJR;
XPD_NOTICE(xpd, "J1 is not supported yet\n");
@@ -311,7 +403,18 @@ static int set_pri_proto(const char *msg, xpd_t *xpd, enum pri_protocol set_prot
return -EINVAL;
}
priv->pri_protocol = set_proto;
- XPD_DBG(SIGNAL, xpd, "%s(%s): %s\n", __FUNCTION__, msg, pri_protocol_name[set_proto]);
+ xpd->channels = pri_num_channels(set_proto);
+ xpd->pcm_len = RPACKET_HEADERSIZE + sizeof(xpp_line_t) + xpd->channels * ZT_CHUNKSIZE;
+ xpd->wanted_pcm_mask = BITMASK(xpd->channels);
+ priv->deflaw = deflaw;
+ priv->dchan_num = dchan_num;
+ xpd->type_name = type_name(priv->pri_protocol, priv->is_nt);
+ XPD_DBG(GENERAL, xpd, "%s, channels=%d, dchan_num=%d, deflaw=%d\n",
+ pri_protocol_name(set_proto),
+ xpd->channels,
+ priv->dchan_num,
+ priv->deflaw
+ );
write_subunit(xpd, REG_FMR1, fmr1);
#ifdef JAPANEZE_SUPPORT
if(rc0)
@@ -358,9 +461,9 @@ static int set_nt(const char *msg, xpd_t *xpd, bool is_nt)
return -EBUSY;
}
priv->is_nt = is_nt;
- xpd->type_name = (is_nt) ? pri_name_nt : pri_name_te;
+ xpd->type_name = type_name(priv->pri_protocol, is_nt);
xpd->direction = (is_nt) ? TO_PHONE : TO_PSTN;
- XPD_DBG(SIGNAL, xpd, "%s(%s): %s\n", __FUNCTION__, msg, (is_nt) ? "NT" : "TE");
+ XPD_DBG(SIGNAL, xpd, "%s(%s): %s %s\n", __FUNCTION__, msg, xpd->type_name, (is_nt) ? "NT" : "TE");
set_master_mode(msg, xpd, is_nt); /* by default set master-mode from NT/TE */
return 0;
}
@@ -388,9 +491,27 @@ static int set_localloop(const char *msg, xpd_t *xpd, bool localloop)
return 0;
}
+#define VALID_CONFIG(bit,flg,str) [bit] = { .flags = flg, .name = str }
+
+static const struct {
+ const char *name;
+ const int flags;
+} valid_spanconfigs[sizeof(unsigned int)*8] = {
+ /* These apply to T1 */
+// VALID_CONFIG(4, ZT_CONFIG_D4, "D4"), FIXME: should support
+ VALID_CONFIG(5, ZT_CONFIG_ESF, "ESF"),
+ VALID_CONFIG(6, ZT_CONFIG_AMI, "AMI"),
+ VALID_CONFIG(7, ZT_CONFIG_B8ZS, "B8ZS"),
+ /* These apply to E1 */
+ VALID_CONFIG(8, ZT_CONFIG_CCS, "CCS"),
+ VALID_CONFIG(9, ZT_CONFIG_HDB3, "HDB3"),
+ VALID_CONFIG(10, ZT_CONFIG_CRC4, "CRC4"),
+};
+
/*
* Called only for 'span' keyword in /etc/zaptel.conf
*/
+
static int pri_spanconfig(struct zt_span *span, struct zt_lineconfig *lc)
{
xpd_t *xpd = span->pvt;
@@ -398,12 +519,44 @@ static int pri_spanconfig(struct zt_span *span, struct zt_lineconfig *lc)
const char *framingstr = "";
const char *codingstr = "";
const char *crcstr = "";
- const byte FMR2_PLB = 0 << 2; /* PLB (Payload Loopback) */
- byte fmr0 = 0;
- byte fmr2 = 0x83 | FMR2_PLB; /* AFRS | AXRA | EXZE */
+ byte fmr0 = 0; /* Dummy initilizations to */
+ byte fmr2 = 0; /* silense false gcc warnings */
+ byte fmr4 = 0x0C;
+ unsigned int bad_bits;
+ int i;
BUG_ON(!xpd);
priv = xpd->priv;
+ /*
+ * validate
+ */
+ bad_bits = lc->lineconfig & pri_linecompat(priv->pri_protocol);
+ bad_bits = bad_bits ^ lc->lineconfig;
+ for(i = 0; i < ARRAY_SIZE(valid_spanconfigs); i++) {
+ unsigned int flags = valid_spanconfigs[i].flags;
+
+ if(bad_bits & BIT(i)) {
+ if(flags) {
+ XPD_ERR(xpd,
+ "Bad config item '%s' for %s. Ignore\n",
+ valid_spanconfigs[i].name,
+ pri_protocol_name(priv->pri_protocol));
+ } else {
+ /* we got real garbage */
+ XPD_ERR(xpd,
+ "Unknown config item 0x%X for %s. Ignore\n",
+ BIT(i),
+ pri_protocol_name(priv->pri_protocol));
+ }
+ }
+ if(flags && flags != BIT(i)) {
+ ERR("%s: BUG: i=%d flags=0x%X\n",
+ __FUNCTION__, i, flags);
+ // BUG();
+ }
+ }
+ if(bad_bits)
+ goto bad_lineconfig;
if(lc->span != xpd->span.spanno) {
XPD_ERR(xpd, "I am span %d but got spanconfig for span %d\n",
xpd->span.spanno, lc->span);
@@ -413,29 +566,43 @@ static int pri_spanconfig(struct zt_span *span, struct zt_lineconfig *lc)
* FIXME: lc->name is unused by ztcfg and zaptel...
* We currently ignore it also.
*/
+ if(priv->pri_protocol == PRI_PROTO_E1)
+ fmr2 = REG_FMR2_E_AXRA | REG_FMR2_E_ALMF; /* 0x03 */
+ else if(priv->pri_protocol == PRI_PROTO_T1)
+ fmr2 = REG_FMR2_T_SSP | REG_FMR2_T_AXRA; /* 0x22 */
+ else if(priv->pri_protocol == PRI_PROTO_J1) {
+ XPD_ERR(xpd, "J1 unsupported yet\n");
+ return -ENOSYS;
+ }
if(priv->local_loopback)
- fmr2 |= 0x4;
+ fmr2 |= REG_FMR2_E_PLB;
/* framing first */
- if (lc->lineconfig & ZT_CONFIG_B8ZS)
+ if (lc->lineconfig & ZT_CONFIG_B8ZS) {
framingstr = "B8ZS";
- else if (lc->lineconfig & ZT_CONFIG_AMI) {
+ fmr0 = REG_FMR0_E_XC1 | REG_FMR0_E_XC0 | REG_FMR0_E_RC1 | REG_FMR0_E_RC0;
+ } else if (lc->lineconfig & ZT_CONFIG_AMI) {
framingstr = "AMI";
- fmr0 = 0xA0;
+ fmr0 = REG_FMR0_E_XC1 | REG_FMR0_E_RC1;
} else if (lc->lineconfig & ZT_CONFIG_HDB3) {
framingstr = "HDB3";
- fmr0 = 0xF0;
- fmr2 |= 0xc0; /* CRC4 receive */ /* FIXME: move bellow to condition on CRC4? */
+ fmr0 = REG_FMR0_E_XC1 | REG_FMR0_E_XC0 | REG_FMR0_E_RC1 | REG_FMR0_E_RC0;
}
/* then coding */
- if (lc->lineconfig & ZT_CONFIG_ESF)
+ if (lc->lineconfig & ZT_CONFIG_ESF) {
codingstr = "ESF";
- else if (lc->lineconfig & ZT_CONFIG_D4)
+ fmr4 |= REG_FMR4_FM1;
+ fmr2 |= REG_FMR2_T_AXRA | REG_FMR2_T_MCSP | REG_FMR2_T_SSP;
+ } else if (lc->lineconfig & ZT_CONFIG_D4) {
codingstr = "D4";
- else if (lc->lineconfig & ZT_CONFIG_CCS)
+ } else if (lc->lineconfig & ZT_CONFIG_CCS) {
codingstr = "CCS";
+ /* do nothing */
+ }
/* E1's can enable CRC checking */
- if (lc->lineconfig & ZT_CONFIG_CRC4)
+ if (lc->lineconfig & ZT_CONFIG_CRC4) {
crcstr = "CRC4";
+ fmr2 |= REG_FMR2_E_RFS1;
+ }
XPD_DBG(GENERAL, xpd, "[%s] lbo=%d lineconfig=%s/%s/%s %s (0x%X) sync=%d\n",
(priv->is_nt)?"NT":"TE",
lc->lbo,
@@ -443,20 +610,22 @@ static int pri_spanconfig(struct zt_span *span, struct zt_lineconfig *lc)
(lc->lineconfig & ZT_CONFIG_NOTOPEN)?"YELLOW":"",
lc->lineconfig,
lc->sync);
- /*
- * FIXME: validate
- */
span->lineconfig = lc->lineconfig;
xpd->timing_priority = lc->sync;
if(fmr0 != 0) {
XPD_DBG(GENERAL, xpd, "%s: fmr0(0x%02X) = 0x%02X\n", __FUNCTION__, REG_FMR0, fmr0);
write_subunit(xpd, REG_FMR0, fmr0);
}
+ XPD_DBG(GENERAL, xpd, "%s: fmr4(0x%02X) = 0x%02X\n", __FUNCTION__, REG_FMR4, fmr4);
+ write_subunit(xpd, REG_FMR4, fmr4);
XPD_DBG(GENERAL, xpd, "%s: fmr2(0x%02X) = 0x%02X\n", __FUNCTION__, REG_FMR2, fmr2);
write_subunit(xpd, REG_FMR2, fmr2);
set_master_mode("spanconfig", xpd, xpd->timing_priority == 0);
elect_syncer("PRI-master_mode");
return 0;
+bad_lineconfig:
+ XPD_ERR(xpd, "Bad span configuration. Abort\n");
+ return -EINVAL;
}
/*
@@ -485,12 +654,6 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
proto_table = &PROTO_TABLE(PRI);
priv = xpd->priv;
xpd->xops = &proto_table->xops;
- /*
- * wanted_pcm_mask and pcm_len: constant for PRI. All 31 channels
- */
- xpd->wanted_pcm_mask = PRI_LINES_BITMASK;
- xpd->pcm_len =
- RPACKET_HEADERSIZE + sizeof(xpp_line_t) + 31 * ZT_CHUNKSIZE;
#ifdef CONFIG_PROC_FS
XPD_DBG(PROC, xpd, "Creating PRI_INFO file\n");
priv->pri_info = create_proc_entry(PROC_PRI_INFO_FNAME, 0644, xpd->proc_xpd_dir);
@@ -515,6 +678,10 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
priv->regfile->read_proc = proc_xpd_register_read;
priv->regfile->data = xpd;
#endif
+ /* Assume E1, changes later from user space */
+ ret = set_pri_proto(xpd, PRI_PROTO_E1);
+ if(ret < 0)
+ goto err;
ret = run_initialize_registers(xpd);
if(ret < 0)
goto err;
@@ -526,16 +693,6 @@ static int PRI_card_init(xbus_t *xbus, xpd_t *xpd)
XPD_NOTICE(xpd, "PRI protocol not set\n");
goto err;
}
- /* FIXME: now we need to fix channel number (E1/T1/J1) */
-
-#if 1
-#else
- /*
- * FPGA firmware limitation:
- * Force HOST sync *before* sending PCM
- */
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_HOST, 0);
-#endif
XPD_DBG(GENERAL, xpd, "done\n");
for(ret = 0; ret < NUM_LEDS; ret++) {
DO_LED(xpd, ret, PRI_LED_ON);
@@ -571,16 +728,20 @@ static int PRI_card_zaptel_preregistration(xpd_t *xpd, bool on)
xbus = xpd->xbus;
priv = xpd->priv;
BUG_ON(!xbus);
- XPD_DBG(GENERAL, xpd, "%s\n", (on)?"on":"off");
+ XPD_DBG(GENERAL, xpd, "%s (proto=%s, channels=%d, deflaw=%d)\n",
+ (on)?"on":"off",
+ pri_protocol_name(priv->pri_protocol),
+ xpd->channels,
+ priv->deflaw);
if(!on) {
/* Nothing to do yet */
return 0;
}
- xpd->span.linecompat = ZT_CONFIG_AMI | ZT_CONFIG_CCS;
- xpd->span.deflaw = ZT_LAW_ALAW;
+ xpd->span.linecompat = pri_linecompat(priv->pri_protocol);
+ xpd->span.deflaw = priv->deflaw;
for_each_line(xpd, i) {
struct zt_chan *cur_chan = &xpd->chans[i];
- bool is_dchan = i == PRI_DCHAN_NUM - 1;
+ bool is_dchan = i == PRI_DCHAN_IDX(priv);
XPD_DBG(GENERAL, xpd, "setting PRI channel %d (%s)\n", i,
(is_dchan)?"DCHAN":"CLEAR");
@@ -595,7 +756,7 @@ static int PRI_card_zaptel_preregistration(xpd_t *xpd, bool on)
} else
cur_chan->sigcap = PRI_BCHAN_SIGCAP;
}
- xpd->offhook = PRI_LINES_BITMASK;
+ xpd->offhook = xpd->wanted_pcm_mask;
xpd->span.spanconfig = pri_spanconfig;
xpd->span.chanconfig = pri_chanconfig;
xpd->span.startup = pri_startup;
@@ -640,9 +801,9 @@ static void dchan_state(xpd_t *xpd, bool up)
byte *pcm;
if(SPAN_REGISTERED(xpd)) {
- pcm = (byte *)&xpd->readchunk[(PRI_DCHAN_NUM - 1) * ZT_CHUNKSIZE];
+ pcm = (byte *)&xpd->span.chans[PRI_DCHAN_IDX(priv)].readchunk;
pcm[0] = 0x00;
- pcm = (byte *)&xpd->span.chans[PRI_DCHAN_NUM - 1].writechunk;
+ pcm = (byte *)&xpd->span.chans[PRI_DCHAN_IDX(priv)].writechunk;
pcm[0] = 0x00;
}
XPD_DBG(SIGNAL, xpd, "STATE CHANGE: D-Channel STOPPED\n");
@@ -730,7 +891,7 @@ static int PRI_card_tick(xbus_t *xbus, xpd_t *xpd)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!priv->initialized)
+ if(!priv->initialized || !xbus->self_ticking)
return 0;
/*
* Poll layer1 status (cascade subunits)
@@ -749,6 +910,26 @@ static int PRI_card_tick(xbus_t *xbus, xpd_t *xpd)
return 0;
}
+static int PRI_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long arg)
+{
+ BUG_ON(!xpd);
+ if(!TRANSPORT_RUNNING(xpd->xbus))
+ return -ENODEV;
+ switch (cmd) {
+ case ZT_TONEDETECT:
+ /*
+ * Asterisk call all span types with this (FXS specific)
+ * call. Silently ignore it.
+ */
+ LINE_DBG(SIGNAL, xpd, pos, "PRI: Starting a call\n");
+ return -ENOTTY;
+ default:
+ report_bad_ioctl(THIS_MODULE->name, xpd, pos, cmd);
+ return -ENOTTY;
+ }
+ return 0;
+}
+
static int PRI_card_close(xpd_t *xpd, lineno_t pos)
{
//struct zt_chan *chan = &xpd->span.chans[pos];
@@ -767,7 +948,7 @@ static int pri_startup(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!xpd->xbus->hardware_exists) {
+ if(!TRANSPORT_RUNNING(xpd->xbus)) {
XPD_DBG(GENERAL, xpd, "Startup called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -788,7 +969,7 @@ static int pri_shutdown(struct zt_span *span)
BUG_ON(!xpd);
priv = xpd->priv;
BUG_ON(!priv);
- if(!xpd->xbus->hardware_exists) {
+ if(!TRANSPORT_RUNNING(xpd->xbus)) {
XPD_DBG(GENERAL, xpd, "Shutdown called by zaptel. No Hardware. Ignored\n");
return -ENODEV;
}
@@ -816,22 +997,34 @@ static void PRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xp
struct zt_chan *chans;
unsigned long flags;
int i;
+ int physical_chan;
+ int physical_mask = 0;
BUG_ON(!xbus);
BUG_ON(!xpd);
BUG_ON(!pack);
priv = xpd->priv;
BUG_ON(!priv);
- /* Shift channel numbers to be 1-31 rather than 0-30. It only
- * takes setting the mask: */
- RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = lines << 1;
pcm = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, pcm);
spin_lock_irqsave(&xpd->lock, flags);
chans = xpd->span.chans;
+ physical_chan = 0;
for_each_line(xpd, i) {
+ if(priv->pri_protocol == PRI_PROTO_E1) {
+ /* In E1 - Only 0'th channel is unused */
+ if(i == 0) {
+ physical_chan++;
+ }
+ } else if(priv->pri_protocol == PRI_PROTO_T1) {
+ /* In T1 - Every 4'th channel is unused */
+ if((i % 4) == 0) {
+ physical_chan++;
+ }
+ }
if(IS_SET(lines, i)) {
+ physical_mask |= BIT(physical_chan);
if(SPAN_REGISTERED(xpd)) {
- if(i == PRI_DCHAN_NUM - 1) {
+ if(i == PRI_DCHAN_IDX(priv)) {
if(priv->dchan_tx_sample != chans[i].writechunk[0]) {
priv->dchan_tx_sample = chans[i].writechunk[0];
priv->dchan_tx_counter++;
@@ -849,7 +1042,9 @@ static void PRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xp
memset((u_char *)pcm, 0x7F, ZT_CHUNKSIZE);
pcm += ZT_CHUNKSIZE;
}
+ physical_chan++;
}
+ RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = physical_mask;
XPD_COUNTER(xpd, PCM_WRITE)++;
spin_unlock_irqrestore(&xpd->lock, flags);
}
@@ -867,39 +1062,55 @@ static void PRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xp
static void PRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
{
struct PRI_priv_data *priv;
- volatile u_char *r;
byte *pcm;
- xpp_line_t pcm_mask;
+ struct zt_chan *chans;
+ xpp_line_t physical_mask;
unsigned long flags;
int i;
+ int logical_chan;
+ if(!SPAN_REGISTERED(xpd))
+ return;
priv = xpd->priv;
BUG_ON(!priv);
pcm = RPACKET_FIELD(pack, GLOBAL, PCM_READ, pcm);
- pcm_mask = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines);
- /* The mask is shifted. make it zero-based again. */
- pcm_mask = (pcm_mask >> 1) & PRI_LINES_BITMASK;
+ physical_mask = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines);
spin_lock_irqsave(&xpd->lock, flags);
- if (xpd->timer_count & 1) {
- /* First part */
- r = xpd->readchunk;
- } else {
- r = xpd->readchunk + ZT_CHUNKSIZE * CHANNELS_PERXPD;
- }
- for (i = 0; i < CHANNELS_PERXPD; i++, r += ZT_CHUNKSIZE) {
- if(IS_SET(pcm_mask, i)) {
+ chans = xpd->span.chans;
+ logical_chan = 0;
+ for (i = 0; i < CHANNELS_PERXPD; i++) {
+ volatile u_char *r;
+
+ if(priv->pri_protocol == PRI_PROTO_E1) {
+ /* In E1 - Only 0'th channel is unused */
+ if(i == 0)
+ continue;
+ } else if(priv->pri_protocol == PRI_PROTO_T1) {
+ /* In T1 - Every 4'th channel is unused */
+ if((i % 4) == 0)
+ continue;
+ }
+ if(logical_chan == PRI_DCHAN_IDX(priv)) {
+ if(priv->dchan_rx_sample != pcm[0]) {
+ if(print_dbg & DBG_PCM) {
+ XPD_INFO(xpd, "RX-D-Chan: prev=0x%X now=0x%X\n",
+ priv->dchan_rx_sample, pcm[0]);
+ dump_packet("RX-D-Chan", pack, 1);
+ }
+ priv->dchan_rx_sample = pcm[0];
+ priv->dchan_rx_counter++;
+ } else if(pcm[0] == 0xFF)
+ dchan_state(xpd, 0);
+ }
+ if(IS_SET(physical_mask, i)) {
+ r = chans[logical_chan].readchunk;
// memset((u_char *)r, 0x5A, ZT_CHUNKSIZE); // DEBUG
// fill_beep((u_char *)r, 1, 1); // DEBUG: BEEP
memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
pcm += ZT_CHUNKSIZE;
}
+ logical_chan++;
}
- pcm = (byte *)&xpd->readchunk[(PRI_DCHAN_NUM - 1) * ZT_CHUNKSIZE];
- if(priv->dchan_rx_sample != pcm[0]) {
- priv->dchan_rx_sample = pcm[0];
- priv->dchan_rx_counter++;
- } else if(pcm[0] == 0xFF)
- dchan_state(xpd, 0);
XPD_COUNTER(xpd, PCM_READ)++;
spin_unlock_irqrestore(&xpd->lock, flags);
}
@@ -938,7 +1149,7 @@ static /* 0x0F */ HOSTCMD(PRI, RELAY_OUT, byte which, bool on)
priv = xpd->priv;
BUG_ON(!priv);
XPD_DBG(LEDS, xpd, "led_sel=%d to_state=%d\n", led_sel, to_led_state);
- XFRAME_NEW(xframe, pack, xbus, PRI, SET_LED, xpd->xbus_idx);
+ XFRAME_NEW_CMD(xframe, pack, xbus, PRI, SET_LED, xpd->xbus_idx);
pri_leds = &RPACKET_FIELD(pack, PRI, SET_LED, pri_leds);
pri_leds->state = to_led_state;
pri_leds->led_sel = led_sel;
@@ -1031,6 +1242,7 @@ static xproto_table_t PROTO_TABLE(PRI) = {
.card_tick = PRI_card_tick,
.card_pcm_fromspan = PRI_card_pcm_fromspan,
.card_pcm_tospan = PRI_card_pcm_tospan,
+ .card_ioctl = PRI_card_ioctl,
.card_close = PRI_card_close,
.card_register_reply = PRI_card_register_reply,
@@ -1065,6 +1277,13 @@ static int proc_pri_info_write(struct file *file, const char __user *buffer, uns
char *tok;
static const char *msg = "PROC"; /* for logs */
int ret = 0;
+ bool got_localloop = 0;
+ bool got_nolocalloop = 0;
+ bool got_te = 0;
+ bool got_nt = 0;
+ bool got_e1 = 0;
+ bool got_t1 = 0;
+ bool got_j1 = 0;
if(!xpd)
return -ENODEV;
@@ -1079,30 +1298,52 @@ static int proc_pri_info_write(struct file *file, const char __user *buffer, uns
}
buf[count] = '\0';
XPD_DBG(PROC, xpd, "PRI-SETUP: got %s\n", buf);
+ /*
+ * First parse. Act only of *everything* is good.
+ */
p = buf;
while((tok = strsep(&p, " \t\v\n")) != NULL) {
if(*tok == '\0')
continue;
XPD_DBG(PROC, xpd, "Got token='%s'\n", tok);
if(strnicmp(tok, "LOCALLOOP", 8) == 0)
- ret = set_localloop(msg, xpd, 1);
+ got_localloop = 1;
else if(strnicmp(tok, "NOLOCALLOOP", 8) == 0)
- ret = set_localloop(msg, xpd, 0);
+ got_nolocalloop = 1;
else if(strnicmp(tok, "NT", 2) == 0)
- ret = set_nt(msg, xpd, 1);
+ got_nt = 1;
else if(strnicmp(tok, "TE", 2) == 0)
- ret = set_nt(msg, xpd, 0);
+ got_te = 1;
else if(strnicmp(tok, "E1", 2) == 0)
- ret = set_pri_proto(msg, xpd, PRI_PROTO_E1);
+ got_e1 = 1;
else if(strnicmp(tok, "T1", 2) == 0)
- ret = set_pri_proto(msg, xpd, PRI_PROTO_T1);
+ got_t1 = 1;
else if(strnicmp(tok, "J1", 2) == 0) {
- ret = set_pri_proto(msg, xpd, PRI_PROTO_J1);
+ got_j1 = 1;
} else {
XPD_NOTICE(xpd, "PRI-SETUP: unknown keyword: '%s'\n", tok);
return -EINVAL;
}
}
+ if(got_e1)
+ ret = set_pri_proto(xpd, PRI_PROTO_E1);
+ else if(got_t1)
+ ret = set_pri_proto(xpd, PRI_PROTO_T1);
+ else if(got_j1)
+ ret = set_pri_proto(xpd, PRI_PROTO_J1);
+ if(priv->pri_protocol == PRI_PROTO_0) {
+ XPD_ERR(xpd,
+ "Must set PRI protocol (E1/T1/J1) before setting other parameters\n");
+ return -EINVAL;
+ }
+ if(got_localloop)
+ ret = set_localloop(msg, xpd, 1);
+ if(got_nolocalloop)
+ ret = set_localloop(msg, xpd, 0);
+ if(got_nt)
+ ret = set_nt(msg, xpd, 1);
+ if(got_te)
+ ret = set_nt(msg, xpd, 0);
return (ret) ? ret : count;
}
@@ -1121,10 +1362,11 @@ static int proc_pri_info_read(char *page, char **start, off_t off, int count, in
spin_lock_irqsave(&xpd->lock, flags);
priv = xpd->priv;
BUG_ON(!priv);
- len += sprintf(page + len, "PRI: %s %s%s\n",
+ len += sprintf(page + len, "PRI: %s %s%s (deflaw=%d, dchan=%d)\n",
(priv->is_nt) ? "NT" : "TE",
- pri_protocol_name[priv->pri_protocol],
- (priv->local_loopback) ? " LOCALLOOP" : "");
+ pri_protocol_name(priv->pri_protocol),
+ (priv->local_loopback) ? " LOCALLOOP" : "",
+ priv->deflaw, priv->dchan_num);
len += sprintf(page + len, "%05d Layer1: ", priv->layer1_replies);
if(priv->poll_noreplies > 1)
len += sprintf(page + len, "No Replies [%d]\n",
@@ -1199,7 +1441,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
char *p;
reg_cmd_t regcmd;
xbus_t *xbus;
- int ret;
+ int ret = -EINVAL;
struct PRI_priv_data *priv;
byte buf[MAX_PROC_WRITE];
@@ -1215,7 +1457,10 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
;
if(*p == '\0')
return 0;
-
+ if(!XBUS_GET(xbus)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped packet. Is shutting down.\n");
+ return -EBUSY;
+ }
memset(buf, 0, MAX_PROC_WRITE);
elements = sscanf(cmdline, "%d %c%c %x %x %x %x %x",
&chipsel,
@@ -1225,11 +1470,11 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, subreg, data);
if(elements < 3) { // At least: chipsel, op, reg_type, reg_num
ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline);
- return -EINVAL;
+ goto out;
}
if(!VALID_CHIPSEL(chipsel)) {
ERR("Bad chip select number: %d\n", chipsel);
- return -EINVAL;
+ goto out;
}
REG_FIELD(&regcmd, chipsel) = chipsel;
switch(op) {
@@ -1241,7 +1486,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown operation type '%c'\n", op);
- return -EINVAL;
+ goto out;
}
if(
(op == 'W' && reg_type == 'D' && elements != 5) ||
@@ -1252,7 +1497,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
ERR("Bad number of elements: '%s' (%d elements): %d %c%c %02X %02X %02X\n",
cmdline, elements,
chipsel, op, reg_type, reg_num, subreg, data);
- return -EINVAL;
+ goto out;
}
switch(reg_type) {
case 'S':
@@ -1271,15 +1516,11 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
break;
default:
ERR("Unkown register type '%c'\n", reg_type);
- return -EINVAL;
+ goto out;
}
regcmd.bytes = sizeof(regcmd) - 1;
REG_FIELD(&regcmd, read_request) = writing;
REG_FIELD(&regcmd, data_high) = 0;
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is in_use\n");
- return -EBUSY;
- }
priv->requested_reply = regcmd;
if(print_dbg)
dump_reg_cmd("PRI", &regcmd, 1);
@@ -1291,7 +1532,8 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
REG_FIELD(&regcmd, subreg),
REG_FIELD(&regcmd, data_low),
REG_FIELD(&regcmd, data_high));
- up_read(&xbus->in_use);
+out:
+ XBUS_PUT(xbus);
return ret;
}
diff --git a/xpp/firmwares/FPGA_1141.hex b/xpp/firmwares/FPGA_1141.hex
index 8f08e26..512df60 100644
--- a/xpp/firmwares/FPGA_1141.hex
+++ b/xpp/firmwares/FPGA_1141.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1141.hex 4761 2007-09-30 16:46:51Z dima $
+# $Id: FPGA_1141.hex 5122 2007-12-12 10:07:59Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400070480A006AD6FF400070480A006AD6FF400070480A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511188
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000782C0A006AD6FF4000782C0A006AD6FF4000782C0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111C4
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200001AA1111AA111001AA11100001AA1111AA11100001AA1111AA1111AA113
:80010000110000002552222552222F21F112122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F1121200002F21F112122F21F112121AA100
:80018000110025522225522200000000002552220000000025522225522200000000002552220000FFF9F99F9F7F78F8878700000000000000000000000000000000000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004F44D4
@@ -19,647 +19,640 @@
:8007000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F33333EAAEEE7F75F55757000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F44F444447F75F557573F31F11313000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444443F31F1131300CFC8F88C8CDFDBFBBDBD1F13F33105
:80078000310000DFDBFBBDBDDFDBFBBDBDDFDBFBBDBD000000004F44F444445F55F555551F11F111110000008F8CFCC8C88F8FFFF8F83AA3334F44F444441F11F11111008F8CFCC8C88F8FFFF8F83AA33300008F8FFFF8F88F8FFFF8F88F8FFFF8F8000000004F44F444444F47F774743AA333000000CFCCFCCCCCDFDEFEEDED1F12F221F9
:80080000214F44F444441F13F3313100CFCCFCCCCCCFCEFEECEC2AA2220000CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCCFCFFFFCFC3AA3334F44F444441F13F3313100CFCCFCCCCCCFCFFFFCFC3AA3330000CFCFFFFCFCCFCFFFFCFCCFCFFFFCFC00000000000000000000AE
-:800880000000000000000000FFFBFBBFBF7F77F77777000080010000000000000000000000000000000000000000000000000000D0510F480000000000000000000000000000400100000000000000000000000000708F0D0000000000000000000000000000000000000000000000000000000000F04FFE8004001800000000000000008B
-:800900000000000040010000000000000000000000000070C1060000000000000000000000000000000000000000000000000000000000F04FFE8002004001008004148002800414800200008002800400002148400100800400002148000010F2A6CE000000000000000000000000000000000000000000000000000000000000FFE40FC6
-:800980000000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024001002100140000000028000014882880080088280028009A0F0080840100002001000000000000001200004001000040010000400100000000009F31094818148002800414182810820416012810A211402A
-:800A0000012810A2414001002B11484001280048408188022148008828108204F05C6580840180020000001002000010024001002100140000000028000014882800008088020000EFF80F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000021000000210000002901800100000000000002
-:800A80000028000000280000B0A20C00002800000000000000000000000000000000002800008008000020080000F09D16000000000000000000000000000000200100000000000000000000000000F07CBE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000100200000000000000000056
-:800B000000000000000000000000000000EFDC0D0000280000000000000000000000180000000000800200008822000000280000F08DED00000000000000000000240000000000000000000000000000000082000000FFF20B0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000C0
-:800B800000004002000000000000000000000000000000F02E9E000000000000000000000000000000000000000000000000000000000000FFE40F00121200100200000080040000000021220000000080010000000000000000008822DE2B0080010024000000000000000000100200000000800100000000000000000000FFBD050020BB
-:800C0000010000000000800400000000200200000000000000000000000000008228FFC50B000000008001120080180100200100001A0100000000000000000000000000202802FE9B000000000000000000008008000000000000000000000000000000000000E0EB010000000000000000000000000000000000000000000000000000B5
-:800C8000000000F04FFE00400124000000000012004002000000008001000000800800800400000000008002175700400100000000000000000000000000180000000000002004000000000080027F160600002400000000001200002100000000000000000088000000000000000000F0CB4A000000001200000080041220080000000033
-:800D0000000000290800000000000000000000001F660200880021160220014200000000008008000040820200002A012B2800008800000000000080F8BA2A0000400218001800000000000000000000200200002200000082000000000000006FFF0600880040220100420020041880080082000000240040220812248A0200000000007A
-:800D800000000080E89603120000000018002004002001120010822182080040020000000000202802220000008200F0561400004800000000000082800210020018188800001800004A0800000000A0420048000000A09D000000000000000000180000008800100200008018020088200A00000000002800009F8C0500000000800100EC
-:800E00000020082A01000023083200008001200888008280082028024800000000008FA1051800000000000048002001800100004002000021400200008002000000200420820800CF8B01000000000082180000422100880088000000800228002828248A02000020080020020000002F1C070080011820018A44022482185820284122D0
-:800E800005004200200400424A2128828889028212880082808802002282820000FF960580010000C01200800888489220180200200824000020091022058880010028A082220000000022004FA90D0000180000100221272540021602008282002118208828084E2220820C20042A0400004800822A840220280800FF5F0E000046020002
-:800F000012000000002400000020080000221800800400A018000000200A00280000B0D70200000000210024188081012100000088800800000020024820880A000000002008800400F083110000122021010027218800908242481A4422091A048081248801124A014AA2141886A268001280880882008800A084000088F0D44980040063
-:800F8000000024004800000000000000800800210000008200882800008800000022001422EFA60E0048800180041200C0325022204102203982800198002180498128A4148004008084A84800800600A02811821002EF1801008021240110221832122CD122014823381212A09C800100202801881AA584802CE1240C42A012A0288880C2
-:8010000028828A0442202488880814F0499280840112800112164222882C282C7112A2444286423212A0C88242121888882112212E12B822EAA61A988288281A09824882CA28880800A82A6812822814D0A50500001A11228184B112C4122421122F28A19416E228B14211029A08E02828E821044282A0A21AA446568201AAA28223AA8D3D
-:8010800082C8200A00A08A282A0A28C20088225FAB03000030423042A084A084124A088848888088041A042C042C042C25C8528A42A2282C81428202284220044220044220242204000070C8084A0400884E422F24B452A1512F28F452C22B142BCC2F2D95C22F24B1C2FDD2522BD525B282ACDDDAFCC2C22F28F4C2422B554ABC92FD52BD
-:80110000522F2CE422F8C2F22F2CB772E72BFD82B22F28ABE22BCE5AA64CEAAAC88AA4CCA0488AAC442AA2CEEAACA81BEE8A088AA822DF7E094AA4448044F242422F24B452E121F582422F25FCC2922F2AFA92122F24FE92D22F2DFDD2522F245D222F28BCD2AD892B988AE424FD1212212BD92F2DFDD2421DA1EAEF3EF5E2C22B74EAEB17
-:801180002AA98E2B8A9AABCCEAAAC88AA4CC4AA462484AA4648AAA22EABCA1EA2818A2882B228FCF0F4AA4511A014E4221421E422F21F1428227252F28FD82B22D922D422F2DF992922F25FD52522F28B852B192AD988AA98CC8242B11CE829ED2F0C2615AADD67E522BFD9AED2BA98A2BA8BAA89CAAA6AAEAAAAAEAAEA8CAA8884AA6A883
-:80120000228AAAEE8AB822A2AA2AF2F1D8A0441AA51152CAE42131421E422F21F1428227252D522D322F24FD72522F21F552522F21F852522F28B852B192ED2CA588CE822F21B442A41146E221A5112F1FE525FB43F22BDD721EF22F29AB882BA8FAAD9CAAAEAAEAAAEEAAAAA8CAA8CCA08A6AA6CEAA8AB822E22AAA223F780D00002C81D1
-:801280004402241A04402241022412200182000090120010022142218009218008888200000000200800F0EF810000001220010000008081C4120000240040020020044002000018800888000000000000F0471680B411021B21421B212394212B141B282B941B282B9413B84229FA4291AAF44291A22F14A9424E912E424E812E4256E17C
-:8013000022641D2EC2D6E122AC292EC21B292EC21B2926B29122B69136421B682394612B8419B64298412B842AB442AA422BA42A94822A84E822F4A84F80B11186B51162241B21241B614AB181D222B99186BA819692AAD412A94A2D91AAD41239322D81AAC1112B821E812362182B9286F1229196B1223D812BD21B492332112B82133929
-:80138000221B282392212B821B2829B2811222982282292292A22B4A29E22AF4B5150082000000000080021200000021800188000040010080040000000080020000005012145F9102000000241AC4128004004200400282800100109212000000002008002A24022022080000008200F01DBD008A01182001002008100220A4C18A22010F
-:8014000012000020840888A0811A8408100280828108004800803A211C82A428804281F215D800CA011880012985018220122204A08488218602200100881A0888118812882004820012C82200280028A890214828242814281FBF050000000024200400004212281220810100D022040020810400210028800200488800C021008288008C
-:80148000F01DDB0000000000000000001200422004000042002084080000002008000000822848002800F0E72A00200110022C0282000000800418008280044800808101802482088001128008200421200400420022F015550080012400222182000000200400A04880044800008004000000008008200400422004420000EFEB08000020
-:80150000000000000000200112480000008004121820882422088001188200001002882200800222F0BB398024040000C042000080020042248200A02800200812800800202802008002002800000024C200D01F0B18421400182218002400821A0240020088210018A082000018800120052002200800A024000082408208F057C90000AC
-:80158000180040020000008004284280040000000000800200120000008200002400200200F0774980048001122240020080880148244A428228048008008820018280028028022200822008000000C0224288009FE2051840010020314240020000008004820028002200001220018021010020020080041002888008004B2B000000007B
-:801600008002800888800800182AA11420810422000020011222002302200120028008422280060000F0CDEA20128144B12101200114200125C382489828280082808282022830420080011848002B120080280822248A8218822848E222240400CF680758120000000020842804001220062248484848000080088A022622A282421252F2
-:80168000A024624220A42400480022800288F08E816012802521C251181426014022022A642168241800A08100002B146882002242222001122D42224800800480028006C8A0842228229F5B0B800442240000008882826028200800A018820048420062428004C20000200800008004000000007059031081440100004848800400184877
-:801700005838A03480018008000048122001290142200324000028008004480000B78820041C0213012214212C012652212829394260222224388880662A4A822202621002212304214880AA214602422092822880820821422318228804EFE20E20888204800300820000122A88080000882008000020051820A121122004420042280099
-:8017800028480000001C041FA40118E01104821C01483C44011C041C820448122C880410020088A0241828181C2222120229140200228084028082042A44220228302214AF5A0A5A217C1181B411B8118122314115111291A21B88C0C2529AD12282341200F24860222828228084E428A4618E121A25A81423B362074A04CAA424232408D3
-:801800008004682B4C4EA262601828FF130A1B221B1818421C021815F122231842DA247442B322A8148AC422625238D24848A8C2686AA4442B4C2CA2185AA3122A81123222A064A05829A244A0422A8826E82A84A22423C4229062A82E61F0CACD8044A1221D112A714221830442882C7A8102CE5223B922AB861AA932222AAF99B866A20F
-:8018800062202182A14260225A022B4326E2217332A218125A22823A22806222424AA284AA242892428220047FBD071A021A02282384921228986818481800008A04000086022412249A4222088220088220182218022908290829082928822882A842882A84F8CF9EF071417E111CF131611F36F532123F15F131633F37B4A2F813132BF5
-:80190000A31F3158221F3DB562F422222B762E2223B332A3453AE22232E26E222F23F322A22F2EED26F772622B989ED22F26E425B5A2EA2A9B2268DE922F2DB962E32ED2227882B262CE222F2EEC2C843C622F2ABCE2A2E42B262B8EEA8AA2664FD54CA1569E613E211F13F371415AF771311F33F673432BFD3F35F533611F37F642423FE2
-:801980003DF5D2722F2CBD62E72FBE22F622222B44EAFF72622F2EBAB2AE773E322F2EAFDC9AF841532BCC8EC38E822F26E42EBDA2AAAA1AA3DDBEB22F2EB662AA6A2E822F28FA828286A2C62BEC2F2CFEE2422F26FCE2C22F2CBA22E41EFC62425F53081D311E413E211F11E214F741511F37D313F741623F11F1E3E32F24F1C3E33F3129
-:801A0000F943C32F26F472722F2EFF62F22B272B772BFF3AABFEAEE22BE26AE627A7EA2BEF7AE612E32DF8D2C25E422B23AEF22BAA3AA215DAE92F3BC26AAEE64E422B888A9A824E42CEE2CEE22BC66AF4E2C22BE823A246AAFC17FF141A7281C1111F13F111233F11F151133F12F541633F14F4F3F33F34F1C3E33F39F983C32F2DFFC2F1
-:801A8000D22F26F5F2F22B362B762BEE2EB26E722BAEE83E322F26A6262B6736F2E2F32B551F25E121F1D2D22F21F532223AE32DBD12A177AE222F26BA22AE444E422B442BC42C64262E422F24F842622F24B422B482C823CE829F830C140040038A01144820482248220982004A22A824824A1202214A12022322B42221A41200702282ED
-:801B0000E4228164224826820440820448800400B0B403000000002180080080042A84014A0138480028200882218221822088019882200828420010020042482100F0AF6580B51182B111A2141B6123B411B642B111B242B911B24239112B94222F1429F24291222D912AC4912E421CE82264112E5296E12265192CA5292CB491C2421B9F
-:801B800029241B29421B2923B48132421B282B841B282B8413B84228BA426A1A2BA4A229AA4AA8AE423EF28081C451112CA141341B414622E134A8414EA11AF442A1F04293A24E132AC4912B422D91AE521CE122CC812E1286E12265183CE11982B49192421B6927221B29421B2923B48132421B2823B481D222B2816224824E22824A2288
-:801C0000982223982286F2734720228804001800000028000000002180018800004001008004800800000028000000002501DF530B82000028200220040020084868208C81A8282842282028011200008A810180818908800200200620840288C021CF320C204901880018128028211822081880A94222004242408281012B28428842166E
-:801C80002205A01822882228008A040082202402424A22621CF03FBB00CA014888228001002012022021A4492AC4E212825A8824682280012B821B14204422A51C12888089A282002A040028802402422C068E4128CF6B0A001400002818A08412888028088002002082820418821800822001001222800900880080A842004222200AF00D
-:801D0000D649004001002601220048204102218A04001240020000002004800800880020260800000000008242B07809281228C0320048208408100242008622880C82202C4482810524828200294182082001222C08284A088880289482A0424800884F460E28182880128202282088040042802828882401244A0824200124200820497A
-:801D8000820888182062288228008880088800488848B0340F001480011142200400290121214224800888004880810480880424000000004A02A0840000460220060088250D184200808204486212204101804C02221622220598C0121A8808008860228A044282288002280000422280C8228A022002F02315144842110000400180029A
-:801E00000062008824240042180088800111242001224218001011022082028002004002003F8E02008021240120018818000080228181080000000012000018800880082004000040820400008842CF6A021A0411184832428025A418281814A042422C22082B18008008181882121800808208A0812088022904800200224AC8228A0206
-:801E800000882CF463960000000040810212000088802103224A810400210000822112298582082200112200004800210000222114FDB8000042001400299822280090822800218008288829012004001818AA44028A018248480082C2480000808884048012F2EA280000C022000022821631424848130518100180344111304211339892
-:801F0000224A8204822088084A2801244882002D22002C04484224822220086FBA0D484800421001000080840819041148190911100224881252B2120014400114C021400114402142212A0800001042F1FCC80080240420F221122008C0822400008218A0585880B12134115A825421113082CA21E11186A12938C260188282402104007B
-:801F8000284082280C290822EF430200208124240400002100100242882902802812120222002200000048008002000010028028080080F2BB36A024200200002713002988840842002280240480014200C26028424242480088200848484A282C0240010042284A0248F03F8E001119042C5121200238AA64141C88118108271C2D8280CE
-:80200000081CE8114601C02125312248204842622800181828242C08282430434A2A84220622248222A8F045390000004A8102400128402208800C4A0800004824200823A8484A12410200003082000020080082000040019F8D42018044014012210480083B2848A048001812182303299121192A859291113814208881CB41400100145C
-:802080002002A02882888002001042F1CB290048193211123361122A112122A42A172C1934C21BCC3BE48833B24234938AB911B83124228454238A39528A8C86E228C441382711882E91882621E81476824131811C92A14621A68A62AAA8483022222E81285F2B0E1001484E424A041CD222F18132AA6A1121882C086019CE821B9848128A
-:80210000583415F223412CE11314F38123218E924AA9112A98C28A8103160115A288A0AC6E8224218A788282820866228814C24126F21389A064004222F0432215A22488F04382C82F2C914112B04204122AA9444E214A7A82C1323F14A23C6E632AFD6131722B484E81CE12172DA896A14D8AA568291CA28480B4622404190C482C84A89D
-:80218000C6A8888A12F2C216804281828142838481440218C013C013A23CA142342214920000122005122212211123120111106122112612011308400228482CA2482848F0D715146AA62615D111E42BA55726F163413E322F27F763E11F31F2D2C22F2CFC53D13E431F17FC61333F1263311F34FC51616AE73CF8C3C3173A3F31F5115305
-:802200003F32E133F3F331DAEB29BD52F553511F35FDE3233961195E433F1EEE2EEE1C4CF383832BEE3F3EFC43432B881F34EE22A2C4AAEE2CEC14E426A6CC28AEA25FE548A1442AA2221F12A64E7AA5222B462E222F26FE73F11F35F6F3E32F25BD52EF33F471816AAB986E311F36FE83A16AFA43511F14F4218337313F37FF33733F332A
-:80228000F3F3211F1DE929FC12915AE425D933BD23EA13EE35FCE3E11F1EE61CEC34FC83833F3AFEA2C227223F1CEC2CEE22AAE68AEC2CAC442E222BCCCAFCE2E21F1F4FA1551F12A6221F11A1643F35B763B632B172B712F1E3E11F1AF3C1A13F35DD22B883F142E32B2BD6B2C3F8B2A12B6C1F1AF681933F38F861C33F33F413533F3210
-:80230000FA13F33F3FF692B32F2BFE72727E322F25B5A3E613A22B1F21B482FCC1C12F2E1EA3AA1F3AFE62622F2CBE82F881812B662BA6AAA2CC2F36BEA2BAE2AECE2E221F9648A1771551111F15E125F753733F1636222B772BAA3F3FFF43733F3CFEC3C33F3FBDC3F582A33F31F8F2A2372C2F18B9D2FEA1B31F38FCA3A33F367423F228
-:80238000B3333F22F733F33F3AF272732F2AFE73722F2BFAB3F33BABAEA1FAFB91C23F186C2C2F2EBA43F4A1A1AE622F22F683A33F1CAC8A2BE62BA6AAAACC2F2ABCE2BEA2EA2AEA22F298112002222082240226220882348A0480A24828924A220100A02420848882088880089880898408888A44022008008A04200442829FC808221155
-:802400002220022622410180020048A880220280984128111081522180042904481002A02800802404000028808824044A085F8308481B21B01122B411324219F6421219B64299212F2419B14239212F1439212F1439212D911B431CE922C4812E4216E122651D2E5296C1529AC2521B293CB59152321B2946B1917242B181726291212FF7
-:8024800014B881F24281112F1428F24282222B842A94832A84E822F4619380A46114196624284691212F24B111C2921B212F24AB214E9313EB2439312C3921983B4B29A85A1CB122CC812B52C6F1221286C15386A1528AD232A549252369349A7242236836284E81F042A3F042A32242222DA2489042882D423FD603208804000000008028
-:802500000200008004000088000040010000000000008084020000004001BF1C0400C01116C2324042011400188280022810022008111001272120022422008018021A14012C44C22200004800800242422F530252829880042CB411A242B082042502481991C213818883086811002003881A2281840226621838E01228ED2228888822F6
-:80258000081908C814008220284481F8D4F3A014C200482C21C411489043242212C83C210AA22C632880A48160186011009021481C220213042480A9418820144232A1A084114800602A481C24FCE98500A01813C112282428271280082400203411000028110020022D921A8201246022822A21E81288E422188188C28228000000880054
-:8026000000F0AFD70040012C210120022522482281012400A014BA84020042130239219412808102100200002028328114000000822800F06A950018001C02425839210C42002024A9582311810840212412021280632878224221122A612182422886A228502100109142A2C88A0488E24822CF580E00003C818184E11201218A042901C9
-:80268000A081C800181840218402141216817212A241384A020010022288292898213111103142A8202C28222224F236930018148002C042800C2100184830122911A1846A880200292402214A81280224602132188848002800820000A0480088C2002F9F42A14142202A010020A429008828C08280040021001321828288A121200180F0
-:802700002426818824880C4221130C228200628024642200F03659006212800248800480214881031A2426230210828201800800112225422221040000902100228A02A0828200D0222488049D9500008200282800000080014001001880048004284848200400B012021228000014800400888082280242FB69A014802102A02400A08253
-:80278000001C28812195224200002842142268821AA221487042024222182B1A80A18420061B8419024A082AA842824880AC2840F21D7E0028002A01802284842181080088481C2302800100000042A0210029010042822240030088008008A04229024248A800180000280000001200111C188222A54880088200803421422842144228F1
-:80280000130100001140813442C0412008808804008FB7060022001248282008008082A8144A81140100132202A0410030220042221420452182840242482621088880022002C0A2F0396920220400424002242019623120011112110016022084040021281220812201298201224081262804140021802248820288CFBD0E002001004AA9
-:80288000011800800A004081A1421880042200A08112273100800810814C41314148112200402104224880082148EF5409800200281A0228282828002028A2A522008A240280248291422002800400184228800500800211004222002A242808AF6707003280010042804401204603002C880123E52228840800141800B0518205A0121C72
-:802900000420A2821448002C28820248000024F0A56A0011C0610000502200902220820120062601201201108184C441001031111C1212621682240013988142680028004888222344F24339008A01481216822405001800004890414228230180448202481848120080112202122C05142002888242884800426221C041F017552022044F
-:80298000122240722122822102C0A230111902281A08B0422284810200281188800800C8800226014824220028422028342214201422F4B5BE001B4C1A22240100429A21C422F082812322FA4241E2145E8166222621A424CE61004A044E4123054A240413B131CA538E612E41821316D211B242880E1CE41AC84242222114C2281C84F490
-:802A0000B5FEA0228A031B312A81B252A6622B22B0229211200116B12182BC6196512982EC26E32A2A62222AA615147E111B22142382D811B5D121C2113A22A1251A4281269261E6A3C81B842B44622A02228ABC2284E4148AF83FDA00122248A01526F25112D022021A082CA12419A9111F3121A12A1AE519819441488840028AF412121D
-:802A80001BF218A0212E621C4132421B16113F168472C1A144A611210411A0884AA6646A82B822682827244FA60F422A0122480018482A89A41280898408A880081C0A1C0814E011028A02822008822008822008000000800228400142002F1641A1441F15A1111D514AEE27B762F6717323E127BD12F9F1D11AE128B882E83EFDB3311F98
-:802B000019FFD1511F2EFFC2431F1CFDC1612F3CF6C3411F36F653517EF23F1FEB2DFDE1C38AA2E4881F1AEA23F673A11D833BC819F481C33F1C5C313BCC1F32B2C3FC41C11F14E428BCC32AA4CC4E422B446E622F22A68A8AF8C2C2EFB24521F211113AD11181E223B372F371332B115ED229F9D1D18AEB29B892F2F1F33F1FFBD1D11FD7
-:802B80001DED3EFFD3E12BDC8AE83DFBE3E1EE322B677E723F17F651531F3CB8A1A2E619F8F1F11F3CFE13E11F33BAA2AED91F31F143411F3CFC63611F36F683C11D811F16E624B4C2AA24CAE82696221F2216B2A2A8884E427F184A81F23171221F12A1283E322B753F17B742A63BCAF7B1B1389AA84D1F3BF933311F1EFF61511F2EDF8A
-:802C000012B5E2AC771F24F562616EC22B651F35B552F57171171E2EA16AA64C1F16F6D1E33F11E718F111111F1DCC623B441F32F2E3A1EEA22BCC1F14AC64CEC22B8C8AACCC6E622B646EE22BEA2BEE8AC8426BBB146AF631313AD311A3747E722B333F17F372622F2BB3E2F6B1B18E822F29B972F5B1B33F1BF3F1F11B7BEEF33F1DF104
-:802C8000F1F1FAF3A1322F1EF671C323F211132B451F3FFFF3232F12AA66CAF4F1F11F35F713211F39F2F3B337151F33B3C3FC81A33F16E22EBAC2DC11AAE4CEC22BCEEAAEAE6E622B64EEE22BEEEA0ECEC28F6E040022A012A0124800002001119041004220044A02420011A0124220C41160128081C41148268144011482148A04482034
-:802D00000800F0492320220120822204802202001081021C2201322008220030210000402101110000002A082008820028A0848280F45F1880B41182B11122B411364219B242B181F6429219B64219F142912AF44293222F1439212D911B421CF921421CF8214216F1214296E1226C192CAC292DD21B292CBC91C2821B294AB891B242B8F2
-:802D800081B24298212F2498212B84112F2428B24228B2422A92822A84E82AF44E8EC04148141A64341B21272419E22431814E12112F241BE1242BF34283122D831994923994921F2285F923C21AF8234252296C152DC31E212F22BD11C2C21B4129B811B64238112F2418E12498214AB881F6422219A4A4B04208290829188238222F6438
-:802E000001208804000000008002000000000080080000140000488002000000000000000014F02A3180A1121C012601144A41328122004846812104241128001924081D12192414B14281082B8280188158221220042820224882248466288082A22C2084E2330D6213081442230222422AE42804E018819861001AA441D6818403282AF4
-:802E8000848281810423854122032818502142282280281432C1002442130288E0164821F4925380A42D12114A22022A24B463880A22191CE111026025481F210C20852888E1142161142935D1128A1222681682212931422880828896821BC2218022282282EA22B4414A21F4D8CFA01211144003141200460220A184484200138182848A
-:802F00001381A2421C1222041002211A02800114208402000048424827241100882024F25E3600400100141200A0412C010000A0418812288280040000220080284101180080086200000080020000DFAB0412182012A1120080A148821324A8948E4188D68214218108C04200802482941282228838822C23B122A8422AA984244834406E
-:802F8000028848222130420022F0B971001280428113018021883441888A4421A8144219258881020000426024220080021821202602882304002188002130420022D0F30A1810010020018024692180210C2C08208108824229040028802128222829691218230B984A0870610200208402280000F03246206614002004001220E214088B
-:803000001A02220000302332824A82C1822A084220A884212024C12220021421214A228C820420240482801802FFCE0BA0242001804442210211224820024001828821121001C8488018818132112004004220240482282986084A0A228A24A22410028FE40D18001428008004004002A0480000801101802441010024202204111800887B
-:80308000222058210011002100002822F08CEC8061128081822404271428C02114482921820200881011810880150348C09282198104122C032A24C86242824E22A290C1E02288248484A82428007F2E062A041001000012004A08004A081400823822B0212405CA0282002E4228001400001124C08148230480042288222088024FC54256
-:80310000014200502100184A1181288109888888008820A4184800124824128A842A2941C281A60324200200800800282C022C022100F0CE17200610611340414101122002004211484A28A41C98212008000014422813242404008A04800C242A04408124044842626022F0149D200118588004004A01001182C011408134110048800128
-:80318000A0410020812804E01102008228288800400148212200228A02F0BF38001214808101101101114A88621588281B85921221D022028219842314820400482820810442182F144102246601C042240025222202A02822DFE4450100001022840111402121022100114248C848C0828001001880013800002100000000228002100263
-:8032000000143FC907000014110040018818004800200812294102002001288828480082A094822462002004002002A200211002DFFA0E11801201182200A622C852422C8234111C0400881421824A09488AA4828880220498190848808546828E0C8014E11842410224A0422C084828F74220252421042100001216A1284882200800502A
-:80328000120000120020482208111122000024240021304221000048002028F8C3EE10810118001210220840013248121AB21228B11102211138484211A084B0210420A28613044E2118181260122280022829242804002012026F9E0F1D112021041E111C2284A1C121121988A4421CB452892188A81115A18539A928CAA8538A21A7C84C
-:803300002911A1AA1826B181B2C27521A1494E522C381223782201112A1423541286E224542240A2A4222E8123F8A321A04612C0511813144231121D2115A18C2F1344A1991886013B119E122CAE44222C041C041B414842E03B2424A1353E81A8281B24921AF38122A084A82522081521B22214022CA2242722288A6622AD8514124A9532
-:803380003113713143820115A11C1AD911A13C9AB143A28C1B421F1F88EC1474C1A1198E52C24A6C2142422B1820AAA458EABC81A44415A18121B042A4566E228A46A2644A62242C38414AA2222ABA62B422048880D26F0A2814281428422842284282000000200232204221422142A1821400009820022211108118811881088848A88050
-:8034000008884880047FBB08627AA1113AE627F432122D116E622B773CB582E92CB5C27881F343515E523F1BE32ABA8288CBF21BE24EC12F31DE13EA2AD313B121BBB1FB11511F16EE2494C2AAFEF1F11B714AA8221F19EF29FD23611F14F441433B641F1CFE61232F24F8A1811F38D813A2A2EAEE28E824A426CA2826A2448FD50366F1C4
-:8034800031111F13F331211F27F472522F16E732F2723146F342D11F28B85269282B567E722B441F2EB693FD11F11AFF22B11F17CF733F14FE61633F17B751B491F131711F1DFDD1522B551B7F1F1FF751711AA9111F11E128F9F2F22B8817383BEE4AE62EFE43C38AEA24B483AEA2EA0E2BCC2B66EEA22B8E6AA4449FD70E4E611AA5338D
-:803500001AA1642F34F523311E132F15F1E1B32F18F9C1D22BEC1F39FD43C11F35FDF3711F29B9E3FB41911F16BD53ED1EDE21BD23D831B832E311A5998AA8B35E532BD8F81BEE9AAFF9BE319AFB91D12BEBDAFDC3C22F3C9E226E222F2EF2812135D113E42AB2E2A6444AE42E8CB422A2CC2AB8F7041F1486A1111B22282D133D111F3747
-:80358000F713111F3BFE53D11F39B1D2FD91D33F11ED27FF53511F39F9E3F11F15F561D12EB11F1DFD41423B422E223F15E515A43BAAAE99DE532B7D1AF7F171BAAFBBBAA3311F38BDF2FED3D11F28F2E2E32BA81F36F2C343823BCC3F32F482222B6EEAAC44EABC22B482A8886AFE5BF64001184023480100148A442109130913081328B8
-:8036000004421328140111421921A492422A0914C091C082482E9248224002A04824822CA2482C220800F02112400100181A0448141A8428012004208801181214000058428880240492200180012C28088246A22800140048000028145F170F481B21B01162141B212394212B1419B24299212B9419B44229F242912AF442B33AD412ABE7
-:803680004A1CEB22C4A12E421E212E429E212F22E419D222A4292CB491C2521B2925B2917242B1917242B181724291612F1498212F1418B14228B2422AB242289282AA84E82AE4FA0C181A061B61421B2127241B214E121B284E9219C2B2A0B4222F14092F14092D812B481CD122C5812CED11886419296C192D439E212C34812EC21B69BA
-:80370000249A64169A7242A1282D81684E81282F141AA1A4B04228B2420829B822042F22F45F8200800400000000800248000000000088000040010080840100000000008004000000EEB680012280012C01211A0813A14848488028A91280A21888002082A5492004242622A6488691318021880A4242272414482110322280020080F450
-:80378000E68490210012197442B14242A1612D412B610039112221028089282403204402C04112222302130822601135C21125611440810A8210A22CE024028E22C2221C22E2FD0E19228482B111C441782583E6358886A1861C840422881A224982AC2812A0482025C141181D2224248AA6841B2C60111651121B281460144A42612E5019
-:80380000226223E2228462288E428022F4AE688001002410022C01181124122112881200A81218008012220C4280221201E012012192214842D022080020080022200222AFBB011800281411804481242401201411220113A884224E21000020842188089800C0830082348280048A04002A042280044880F4D729A0421A02001821112495
-:803880009222C2184811421B82484A01121182482C041B24142A48A3242CA12C288813E611088229210448882D8120022024F822C2484882004A029F490E281800D02101422442482001130433822411216812001002148AC612682C29220219042C08204C118298C3A0840042A22F24A84248488084041FCF0A4A210228110011111A2855
-:80390000220D429041881248824A011C2E240466014021088AA41888221C19C18218008A0400220080840220082082B4360F200422808214210628001428005021003812271560122842110011A0241882802822024082081124000000282304422924F2E5E760144220A824242011C1411021C84219022200200123222108190424209188
-:8039800061828004421811601C0014232438218A4401284200208418C282FFBD0C006018110000180000A0288868800200000000482602009011242001200848000088200488800228001E62601400281326820446A1142211823411A2284A0222121AA2124681081982044212628828581641828922E21824082F14888448A384860168DA
-:803A000042882229028A0286F272F22008100110321122110080048008340000001322041421282180048800130100400214280000008024842424F2BF2F80220128132432412216A1821C08882B480020A582C08200888A04223242201822324226118208882008820020021C6814424200808408884FAF04110040020024000020A441EE
-:803A800048304180044200484220280A28802895A190824022428202802244020020C2222400009D9A200A225820210142004220840800804201884A082820218404219022822B242829A22112008084220482002222C800A08222228F12031B416219041901111811301110810AC082622C0190C1211118238122040013A4181C08130865
-:803B00001032622146118282641811420024002902800482FF9B0D0080020000989A2428082018011328B8A124E224028A048004A0C288A0414824288888008882888004801801888088088048F1A31D0042481220080000808402001110011022812122240242806216601948424842A0482006219042142904242C04002A0824F053EB2F
-:803B800000800500100200109212881C24084A2201B01288840100A0822148230121002C048880024882294A220400800248420022BF320918921142386800481A04C822A02414421C08982C220400121800204621240180888201284220220C1B280088228088A468002221DDFA208882054200800100C02115820880E11204135822809A
-:803C000031418831882120C88100408184F22241202244110290811B242314022904002221F0E6C6C0218A81A14126A24212A011588E114A94812186E218A8882F11A434681BA21F14642848A06320A2442AEA24D222EA2BB48265272B82266228D6B28224088A44B162B841F6A3413DC321171468212122CAA4C6283CA8A84F1C051B1249
-:803C8000BA741181D1118592412B1215A2821B818A2804A81B441413F821813B9B4A3422222581BC4121872518223841421EA2111738282A92227E212B221F2E3242E282298822FC81C1C8A046822C28028A28022F7F07524A82A226521814E014242904272A1BDC4E41124AA4249A4461388AA8D4DA682C80B65382E82CA4C2AE41B81338
-:803D0000E418AD641B8C29A892244A88A4A22C86242A04422562222CE826AE242C08622823F29118100111101112111211121182049012902210021840414241420114211002211012011121112111244002248200A048004282E0EE4BB18161142E211F11F56192BE331E11157343522113F481833F1CF813133417215AE828F9D2933F4E
-:803D80003BF9E2D11B77141652132E313F13F12362113F12F2A3212B2A2BB32B513F1DB563F621232DA22F384EF381A32AF222212F3AEE2AFE838126F242823551132E22AEA22E222C58222BA22AA2A22E22BED9E012F731211B221B337E131F33FB1112357242F39113CEC18EC23F3CFA41832F35ED2DE825FC82922B9D1F18FAF1E1FEB2
-:803E0000F11F3ADA3155332F1EFE23713F223F813F3AF2E321EE622BEB1F2AF6B3711F36F661E32E822F33F352513F3CFEA3E3AEA3AEC11F1AAC8C626A8EFC81A12E22AAAA22CEC22F2EB2A23A22AAFA22A23F69072E211AB721B331E31FB732F751523B444E412B48CE933F18F841E13F39E91CBC43E124B9D2A3FDBE116ABD23E619F91A
-:803E8000C1511F3CBC63EE37E332A6AE2F26FE82622D632F2BF3F2723F37F773732F2AF6A3A32F2BBB43B482FA81A3AEA21F2AEA2AFA83E11F28F282E239F8C3812F26F6E2E22F24FC22C22CA4A62BA62A4AF23CACB0F1E713E212A2331B772F12E614E424B453B593F5C1D22BC81F3CFC41432F15BD42A1D4DE522F2DFDA2A32F1FEE16F2
-:803F0000FE31B1CEC22BC81BE26E73AE73AAFA22A22B2EEE422B7FEE723F1FFFF1F38EE21F3AFAB2B23F2CFCA1A3EABEA2FAE3E23F3AFAC2622F2EF6C2E22F24B8E3F842422BAE2BAA2F2EEC2EA2AAAAEA2AAAAAFF3C071C011C21880118008220482248A248248A44328142A02482422084A124208428A4926012A082E02289448224826D
-:803F8000248244814483848204800228F0AB5C0028221190211081311120080000924A2202221C0814C021E018021C022820880524008222802808000080022810820486714E01481B21B01162241B61272619F2621219F6429219B64219B14229F24291222F142BD212A9421CE922C4812F2264112F2264192F2264192CA4292CB491C25D
-:80400000421B29341B2946B1917242B181724291212F14B881B24218B14228B24228B24228BA42A842882E427FAD08481B61B01126B4112292416A91214A9921B819B64239212F1439212F142BD212B822C4812AC5812AED11A84296E12264192D439E212D421B292D429A56329A66149A7242A1282714284E8119A2A41B2842A223241A7C
-:8040800022B24238A2F022422B5700824800000010480100004481001002188008000014A02200480000800800800200000010025F150D80014002244224482F2824A11C20182234111CC11116886488228CB842120284E081042488004121200B68884601822582048A642220248488AA28007F5A47028E245028C81E281331382B2486A2
-:8041000081211A22813411218A6284824100C8004634612A2454212E442B92480038881A08211218221428141318012B854120A8218C24541462DF3D0521CA0181109A1127264825825C222A288158323021934151A4428628C98ACAC2442AA442489391631288004B24216021A0248AE11244E128426316C0C25A1A24042AE8A88402F09D
-:8041800093D3004C0230C21A021628B28184A1294A0142124292429218002A04241011084245A2282904208128A9828001000088110021A08412288A44A4425F7B04210000E0120121802848010088111041013021000044411A1206002602418200004148211A06004062816450480082AF3D021A24021991322E192D46901423F21223A6
-:804200001C622887284B849954422C34811A8C486181C0842441182D122C816821866266188E419E213BA18D221D145E213748892A389A4888884820CAA448A0280022F0455B002210818131431026A28325C1832C3884461924C4811C040022441026413416291A14D224021BC237211F42B988C21412860549A88121CA020082266481F9
-:80428000801A08007F3A042B14002C81D218E24211C21250122A0884422482112192194861811182002412C01212822984018A0224141F22048B28704288242188042282295424100428821F9A08485210684811442100AB286045498412862181C84442439C5A162288B422E48218311861138104288B2842122110869E164C8281041ADE
-:8043000002C88C04428C6CC8C3057018F4F6B61423324228282400112525011144A0212C92441C7222C212117022244D982814293822288C81649A0083B14413E8C882414284768211621A6D42282C09B024F82214412C82084C22D1D2051C4124511688810012C118528C08A0148908110012141584024441002E81502446066502108113
-:80438000220284528412A048442091422422004008CFED0B2B24182C5218644052211341AE92181246046F24F248141127122146B154F828154318B848B2271458122E12874948CB2827643026692271A42123F224C28D765B6889B19156221A7C14224862466F21C244A68C0D50249F98083C4184C12450814110241198418B84802181A3
-:804400002883B8141402421D42A800638242C8211842808229512884244421C012004C0482421E488848890AA514D24842F8AD7E0021200214569121116624844295424A79841892414111A048848E41B028044112AE4243C148298492B819B682040042421922444462184A02423014242022A24816A468FF5907514280412201424018E2
-:804480009143294844418192148C880126844106418C22420800540080024492D153220189227818129188A1008B82422918042170B6092042C24248008C440188901115028E310044D0A2184884081280140280A838190814C1458112E12219881801800843082243048A319288890B27215FF20341130184124D22102471511821088C9D
-:8045000012011862A143240270228144122818082400482081812C6124841644041508CC42C628884D82508489022D444128F0CA8820180180922228284A81828281218835422232E22F12817561883468472282138191454216042A25D484644400E0412485644448C2AD446214139441469688284120120416F12F22C048AD12000012C9
-:804580000040C444624E2244284A480910A4818880098820686800408262821820286812194203201221180480040000D8827FA90411601110C444159414288216420A23018118881008204282812252811884A012C024801824012820088081584284C082402288688296184844F4283C1412243C416155198142514249B942CA818894CE
-:80460000A22761406423463446144221424C0443644418138E6C488624AC18A287186F84722428288816810C48298424B2820440941429A4128944F8D3274068424812288C94448C011460C2E048128404830840C8142594142E12148811C0240014841284B014041165024008284445821202244427841028342262DFBC044D46AF6A8435
-:804680001181C2151F45F6711119F2814545F1AB889287941E22CD2829F2448D2E92533244DEE843A5444336DD211D295E14EE7223A48443F4C5C48FC4FA41C1274BCF4181A2DF2F23E4D4AE612B4448421DE14E446CF8C1C84F4814847818CA82AFC8A6B587124E626F454D1141711331321CB43146D18472543168683CC6143F68BC4377
-:80470000C8923AE12237484E4DAFC2554B6CF4352821488F1222D11AC4844F58B188A6E326A2419A825B2145DC15F2418D73E21658184F96F1222227A72D821F84C4222F24DA2AE8CAA2CC28888E4449E683F939F7C0111B31248F24F1741667A44B128D4429F114B83F2EA9143F3698144F58F5F3454A38994FC8F21212824F12B128F8E3
-:8047800082872CFE222416F8C444478845E82122F182148CA21A2E14C9E418A85A85B68C235945118B88CB8883D81D328E21E045542E67426F8BB164712CE8653984AFB90D4241100C81488148832219A848850285A148141A5418121C224821480181191898842002981188118884888041884188618820088688825448922008FFF40A04
-:804800004F41F57635CFE1F11E4D9FDAB228FA6968CF67F2561CD7217F8AFA3339BF6CF8151CCF81F12D35DF46DA91F24128DF92F2491A5D1DDDD4FFF3F265E55F5EF5341DDFD5FD9119CFC3F391736F45F54444CFA5F7AAB11F12F2D1389F3BF2BB799F97F7FBF11F71F323359FB5B55AF518188F22D388D97DF8C1C14F25F55CDC8F2129
-:80488000F1181A2F27BEB2FC3C5C8F81D96EF6C22D141F31F5B9735F617116F76FEF9F26F2612C1FB5F37F7D57B8FFDABABAF3DBFADF41F1151A7FD3F3FDED9D355F745E75DFD2F21F1D9F19F93D3F4F7CFE47C54F53F144449AF934327F79FF56554D44CFBFF7A7A55F52FAB5759F3BFBBEAD5F17F6F6F37F73FB67351F35B5C2EC48F8E9
-:8049000062B24CDB66F841C14F25F5D4D46F61F136B46F47FE72EE6FC7F5D888EF64FE8725E067F632721E1227119F56F6E63D3F86F6753E6F45F1518B2F4FFB39B21F2DBB49F8D1991F97FB4E845F95E385F37B3BAD18FF91B93CFB2D9FAF96F848C94FC5F5595D1F99F4B83ABFBFF7EA694F45F57CFA2F8FFBB1214F4BFF9D17BFDBF378
-:80498000F97FEF4FFF993BEFD1F2485BBF14FC898D8F23F29AA8BD839F9CFC4ECCEFE4FC4C424E48CFE7FEFEBCAF87FD58D8CF44F5FC83145F77F6A53715F11819DF767767FF67649F27F5575D9F3DFDF29C3FAFFBDBD27FEDFDD796BF1BF9CFCCDF54F5F5FCBFF5F53F3CDF99B99DF9ADBFEFCEFE48494FC5F54C4D4F89F8BCBAFFFFFFF1
-:804A0000DAD84F45F5FDFA6F5BFBB1B15F4BFB9D97AFDBFBD9DFEF6EF8BFBFEFD7F6485ABF1DF9A989BF2FFA9E88AF28FCC9CBAFA8FCCECEEF24FC4AC8CFEFFFF2BC6F8FFCFCFACF4CFC815D6012901240011C815414603240036440046C024C2241044C12438441042829014B9220024342B82401490914004022482541264926282471DD
-:804A80004804AF870D003412458286C1242A0188481C2959124838800842488B24004828185241B024052A249C14822A011819B4620180E426182184644410024A220284896212EF7C0B2CF4112487221FC132481FC1324A1D6CAB161FC8B24AF98128AF245985AB944782AF347924F84291478AAD914F82C4B14FA2C4814FA264117FA2DD
-:804B0000E419F2264A96E5A2E449D2A2F491242CFD9124AD821F4932481F49B24AF89124EB961F41B24AB911B24A3985AB9443B24A3B242BB44F8A94924F8284F9244A9F1305A41F41F62842178183F4112CA3D4C1B628F1816CAF44F98128A9DB85B64879A4D81AF13448AD914B4AAD116B481CF3A65A85F124DA8F15F825428B211F226D
-:804B80007C18E5B27C98C54A1FC8C2CA1F49C6C21FC1A2841FC9F24A821FC1E2267911EC54F991282B345F88B24A79A4B842F3244829EB8BD442F8A64829E1AAD5D904842308000000004440080000120000880020040014008400000000100800200200001002DFAE016562114992242D42264A8121133121158229414114CA1989954A72
-:804C000083A8141290224890488768C39842248AB184F2168218141F88230284A3D8486284184002844C1C42944849889322CC2224F26A24A034A216331160186821812934182964142D81E3741138914A5241981B4285E44AE4C8E2280413642200972A8D8487221E481486622860588E164F17280186661A29A8424E125E812D19437D0A
-:804C80008238B489D242B8482844E944F8D84E242A34D32C635123F42288269112281974248934628AD1925478118F1112A4948E424A21F514AA4AB88294414E2A4D8883D8833881278A2F187388A1813B848B29A6B114D8526E884D28C43E8341682376C8F1CE124A6848AE448D8429CA4AC364845AF882FE9014284581021123048D1252
-:804D0000C012113C1941249198488F3441D81852844C0A280000614A5286124D4A161402254104169812E0240888C012121443116A81284391A222302465094302A0212210C248854228A4418140022412466782424800000000C012812A042C810280016240422884662484290800A04BA04B80F4DA732045311284581D18742CE141E4D0
-:804D8000216431268289A5845A2288A481484D18281E288088D284A2614ABA14F22A42626823A8524334111EA8291B24AB81839844D0221A018E41141AA6816AE84C02C60C8B2C825F680D6214188322731852214824422B41122381044288C08446488C342800408421E441D28222C46228C044139338290218DA024344EA2C9261704216
-:804E00000A388880A6144D488242C87F4C03494102124811448D12CB148C41A3248388A1482B12241A643522522812208832284AA28260241A52824AA8341821828A3114A890881002206418198884A12C4C282AA8612E88B0A80460A12C6242C3C1222482124B212B12818325881678A88444443824A634215EA423082C02001622742840
-:804E800015CC11834C64421844302A808C2888C122148444423A84E248E22B044C013F964B016608144652184B254902B0840424801201388581213418274112460889A4C31742282992214882482266028848884C3128502CD084C228488A94629615C85981241E24834278DF47A2612115849122189089288414225014846150242E52E4
-:804F0000248621841481926818850444441602002129013C2281A248421A822124048608C029441442218908F03A5E142D12381D2641AF46312843D7C20285E212C52887255C6884D1CB281E24BF24C11A26E48CB32134812B2C682E1A3658142632141A3224CCC851C86B124CA2A11E44B0142682C814B018029C6C886B424B38C3B148E6
-:804F8000E342A8814D284342F81566A04210B21142321121112AE141824804400280C424E01418D442B12414482894442841282D4283048423022111218A928A8CA41686B842C84485024230482A048CB442229918D0E10CB08232248158212818402883822884E1420100244D1262904242221800C044842891004088819424A02C00486F
-:80500000007048C1C8228048322884AA013EBD8004160860844CC548488A0640085081280011400841C4C0C426728804882892E0416884422008806411111E2141225E214412228CC438123A0812841E467FDF0B2847191844100426341844CA42A11416B4284452484180140462002784304CA01412230211008988012048482411C4880C
-:80508000D04808218CB49202002C820184BF134A424842C222874122E1588044080045028226A158C9222438821508182123A841A9188144E54481C2811214261108211048C21111144A02410028418243120AFE8A004016012C24412C41480410094B140000805228628C944889D4840244848504F0681438412843544884405882C1494D
-:805100004202151804440018498802F0D269501489410124118C0228400125A12412808141588418181841182444508284520000842A112841622444C0A22820460246084A5848200881884CF8EB7D60845428A0282848C044148914880A8C1428A642A01222542181441118701134414521F1244122008054811B2426B481621246F1818C
-:8051800042888883289882A2A048404138844C42F2DA4F2445E228024902181081220200848A422248A458128602841A388210A884401428044C03100884A64468424548840C584446B8144254848E6200807C1421F8ED2B4018C848122F828408224548C41185C5489A024A1204C1C24A32C8230C18448823815421A0811CA184E085021D
-:80520000C840C1411C0432841651411AE4410220011A1828012512F8787DF0446657483E2435A82CD6F228384A4134C87A579130185E685FA284A33218C528D28E3128E718A44F34C4548FECA9D11D484D4B83A2224A934432898D3A198DA14CF48121881F15B28D6411481D254994288EA84B618F82AE82BCDA88D28A7E84694C5F91471D
-:8052800012F39828D9F124248D5E712F41F41C248F81F724285798819B8F4E4C4B125A322646648817284F4401CE8826AA448F8172569842C57C18F151941E481A99C98B22CA473C19267161B82E22F62C21AB122FA4B88723B3C6F95A8ECC11AC1C43981286A4184D143E258D1A1FEE4B012F3251A21632322E6843F4214843D64114283B
-:80530000D282B4819188AD14CE8C45F158C47E741EE2EEE12CE545D44C0885B224724273C416E844DB447434E54119A121844E9C4D441FA4D8C6F4114C47883E25CCFC41A18F8114F156C16E468FC22825A9114B82B28999864F110300A01280412802888008001C021C02144005142154C02120182208824113282208821482800400402E
-:80538000410812001400004BE4144F42F2141C8FE3712951ECF5B762F771318B361DE41BDF1F3FFD7A189F1CA8B44F7AF823315F1EFE31314FDAFA35A19F9CFCB5FD6F69FC23E11D539FB1F444CE3F1AFA98989E949E58A87CF997973F13F114945F52BAB8FF88289F5ABAA8FC2D333F1DF9881E2BD1AEF3BF5795549F9DBF44DC84EC2278
-:80540000F31614CD1CCFE5F52C385AF556C2AF11096F66F67775AFA3F23D7787A1BD23AF86F6696DCB269F56FAF4F4FEF2AFC5F38D8D4F64F8F6F77F16B7A4FA28284F5EFB15F1AF8BFFB4B4FFDCFD69E9CECE4F21F44CCC1F17F75159DFD8F8D4454F46EE75FD9E8E2BDD5F55FD1C9C1F19F9E161DF74B622F6A597BF15D548E957FB6107
-:8054800033BFD5F18492BFDDFF4468CBC88F26FBB6B4CFC1F3DC7CEF83E985F548DC3FF64AF164625F73F7393FFFD1711AFA1B1B6B65DF17F768349F4FF371FC1F32F2CAE89F9CFC48D23F6AFAA2B14F4CEC4FFFB5AC8F93FAAEACBEB89F9CBD24DAA8FC1A181FB2B336F75D5A2F49E591FD1434DE566FE5B5D2FF34745F5BB3B8F37CFB63
-:80550000BF72F26A65DF37F3DF99DFF1FF33F51F33F7DBF3FFE1F5DBD96EE48F85FDB8B26F4BFB29387E78AFCBF99894CD929F8F4AF367677F53F73A3ADFF57158FA1B1BCF87F77D7DCF46F3F9357EFC1FB2F2CFC99F99F958DA3F6FFFE6F15F59F9F8FCDFCFFB7CFDDFDFEF2BF78CCEFFB2FA47CFEFE1F5EF7FEFA3F7D7DBFFFCF44AC8AE
-:805580004F41F3D1526FA9FA63615F53F7BC3C9F9BF37DB9DF76F2EAECDFFFFB5E53FF73FF73F11F3FFFDFD95F69FDF3954FCEBEDCFD78B26F4BFBBCBCCFCFFF3CBC4FC1D1ECF834F70090161082140443E2810448A04980C424135848124E24304811874430481931486183941442492184012601418C14C44845410840E189048A44A416
-:80560000480020594882CF3D05430A226022001E684210880284242E484A88A4242288A20088002342840100002180410C280020A8848220C1141E488826881814288838848E1DC0421F41F228121F41B248F81124A3D6C1B24AF18124AB941B28AB9451AB9443F24AB147822F347B24D812F924481CF9244A1CF8244A1E214FA2E419E27D
-:80568000A26C59ACFC98244DCA1F49C2C21F49D228F891248B841F49B24AF88124AB941D24AB961D28AB9451AF247934B84A39242F24792498924F8284F9244A9F1B0D3CC46C8D4315FC4C811D282F16D141F24A114CF24A171E24AF1413F14AB553E11438142F347825D81AF935485CD886C5911FA2EC51D2A46C111F826451BC64413C11
-:805700007411F824431F41542C1D448F34F111248F347111F42A121F41E2343911AF641BE4241BF44A8243F34A964399126598924D187F4F0E0048000000004400008200000080018800004001008004008400002290220000000014F028C30011148C9212915CE481D42831482A84485112121E848AC5483088AB528034488C22445842E1
-:80578000200A20E182A44120B28241E24298819D842B21818A2193988430882F41D848A64A18C929F184484B3C49F2972FE021E2482242B5C97242D48263124E244961285227844E864183544A2B812A551482832283CA45222B4322C84F84E1428CB7221CD224220184363418424A522C2E14E4822B2411469E144298908826A24A1885C0
-:805800006188BD842032442287728B8125736CE114B31C344C436E282AF444812D148CD4A4A5944A13E4A82782B1B884227818C2A4888E4C4AF811421ABA28B4380442A369414B1A19E848D62E61418CB824B88267126C648129E9862132984DB22C99D44E914F81FA2464C01219420166C14C1884262241A241850330942948081788217C
-:80588000844A0287542E424A02422AC1242242214429810228A148858132281694128481844C98444CA84840A824848D24F0A4B4002822404204122430481B483C08259245421142806888880000002E181A1222814484018012C2441C08804202818442122800840088A2DF1E0A62409112622E482924922159CAA21688D181B514842354
-:80590000D282C3A460D7438466188A86664428C60A008AA6811E42114B821A98121B18134BF228C48A72D47848618D96C1C29823AC49874C46A8784249CE4444DD7D80043012224D682384838278A8E2852861154A61432226A8A4B094E284288628281624022B12002242582122882923A81A826B288A82688416C8988D424A39C22A9D5D
-:805980004889B42888B424C884F069932082C2216024005021262544C183812596414239410417844188116220048B84842C035AA8184116318418D012C1451483042E5C34C814828001490858808434A42FB70D636483856412122911A8121A028A13381448001219312422822684C1894941382412008260832791696164414412415426
-:805A00008A2484382C11C028002283D842A12412168208F0C3870042288149024682D45A440800C168288082644121CA912242183042283E4816688146041C440A4632986581014942A4252093441A5A1243212482840824523E4889E9C305221110842482120C182012F181121662284A221418A843819443C22848606480A64212212AC9
-:805A800088A41218004E2238C0188148C08829840C8C911489721488EC8648442464F88062112826D1242482764AF44128813A382812CF38C4528229B11164C649B342EBC86791C90A8CB442E24291588B4152301A29D822E44412961849B124E152A12449C4984986A1842FA4681C162496AC43B2C483EC82C4848325DCBF036984124C23
-:805B0000AC1212811A92161244402101224A220284002992418D2440C44228228B284985E282654118126D82114602496881628426418C0160812CE181142881A9414C42F828B1008100000081228C9C8289022028A28121004890C22A8452228481848021048008820020280818A0148C048489088C941418822089F852A4400224B0284E
-:805B800025021A0245085E282988442241012AC5581460822494003810741224429C44174426444468442AD4414148245449D04888398C304498A048412843C82249F47484004444484024046C021001200800130848812149522483042384032C1281052114888018A8844200428C0141808118086081128240F21217C048130251008180
-:805C0000814210024860643CA28522205662221883810980014882811420892401002008002A0400C28984161404205422816F520BE22002452822E41204484018C2422068424800128A611223022002841AA841121216A28521160182480010022188802802C60889C882A014001F7F0E1880052A714A8141823421F082448420E22184D6
-:805C800088A1429889C228C8828A864308460140088420298414890821812A24681932D0288384019812E024022B24886FAC0E212B2129143242472100801148B44488A218E01481229121001648D381014842306825C8448002429024414116112502459844848AC564864C644146044C6448442D148F44F2FE7F00414128418122838414
-:805D000092442B284004200290883088209448901A1598282B84D02908884A08188240288828D4814828444841188141022C08890880044F56011E28421A2401301850A410C424902148100444811302214418482BA4A021A02440114151829048004008228E21284423A2342001124AA242209382F081EE245247281E24247A544C5AE462
-:805D800085548A4F4232224A9C881914A2211BA26213E3319A61848BF6ADC49F84D4284493423E21CB4266E21205ACE811B1848541846444C691491B284A7281E185F1883863B1D899848AD18E85BC82E58CF9A4228A353427823F6841E122E513C21247158D1C37862E181B224E645870B8EBC8062E42C6F2C2152CF148748F84511C2957
-:805E000042F8E43A43F872188B44E0846424CBA125B414F444216D822B82434558418C9415C65484A9F45CA8A332118B44593412C7848AA8184F41383C2938348AB984F441268072421C942249A221A181472237A4CFA89C226324B4C4F922914B419AA2882AE482B9686931142F328AF222288FA7B38861892F987518B8C8A1411B4C130A
-:805E8000B58198A8CF88A88A1AD8829888224C94E5C8AE98C48F8EE5412C7754EC84C2441AE444E824F648847F5F0C800118800118C012C01280110441100412001002210028214E24C024214C022880024C0244228222000022001C22812281B2BC47D222D6E6F326226D42EF81D275F16A689F37765AF2CFC7AF25F75AE28FC958FD6FF9
-:805F000065F7C4D45F1BE948E9CFE989F845458F8EFC9191CF48F887878F22D433F1382ABF15B1FCF9131F5F49FFAC6C8F7EFEB6B64BA95F1AFABC349F1AFE8C2C9FBFFFAEA4DF7CFCC2E85F74F116D81F31F15A98D5FF4A88CFE2F2BEB47E12AF85D364F926964F48F8AC8C6F41F61B75242D426FE6F426266F42E224567BAF82F2796B17
-:805F8000A745FF7FFD5E3CABADAF8F7A49BB52F5D4D45F17ED4BE9CBF9E4CC9F9AF8AA8815F1AE863F3AFCAAF21F31D5A2FDFBD1CFAFFF131F2F1CFFB8388F68F8DFDD7F1DFEE5E94FC9F185858F88FABD3F2B221F3CFC8A88DD176FCBFD1183AFC7FA1D17EFCDFD88DAEF49FD7496EFC557656F44DC46F84C8C4F44FDF2DE242F25F612D0
-:80600000726F63F21616AF85F47173A7879FB6F34A2A7F79FBEAE4AF8CAFEC9FB9B942B4F4EF4FAD5D4B9F8F88FB141CAF8AFAD1B1CF64FF8686AF26FC2311AFA7F61B11CF2FFDF3F7AF9BFD9878CF2CFC818F2F4EFC91F5CF49F98D854F4AE825F7DAD81F36F6C6ECFEB22FC5FF7133AF89FB8D9F6F447954F65E9C4FA7B186FA24B66F1B
-:8060800042F97664AAF86838CFB948B252F738726F63F33636AFA7F73B33AF87F5693BEFA4F2E7E5AFCFBFCABFC2FADD9F65F4D1D51F5FAD194BDFDFDFFFF1D98F8FFD515BDFDEFEE7CF8F87FE3B3B2FAEF7BB99CF8EFE9B9FCFCFFD9878CBEE3FF9F5B2C49F59FFBCBCDF58A8CE5F7DFFDFDD9FB6F6EEEC9F37F3FBFD9F3FFADEF85F7436
-:80610000F4DE9CCF64F97EFC4FE7F9CAF84F6FB7F2FF74F44F43FFECEC3FB20343020043C248228C642220C248800412284828488B24B04822B84812B24812B24802812183040000848084C948881A049E48E089049E48E08914A848428242826F350F8A21512628181200424488822186A88482218281A0849A04438808009220482849E0
-:8061800022812C88694800C048812822101804401404844C23C21445F8B4F7C0431F4152381F417248F11124A3F41124AF24F11124AF24B911F24A9153B14A3924AF3439252F347924D812F924481CF9244A1CF8264A16F1265A96F1244A96D5A6E449D2A4F491246D421F4952281F49324C1F49324E1F48B24ED141B24A9921AB9451AB4F
-:806200009443B24A39242B94478329F93448984FA2F4B3B1C04A1F41562C1E6487241F4132481D244B141D2C8F4489B24A0BABB413B24A39314E81178329F827481CF925584CF825D81E815F8264195D4886519496D18464894D4B1B4985F391444714967C4C7181F44E114CF248151D24AF141BF548B1418B94412B944783986F8384F8FF
-:80628000265A1FD30910820400180081400428000000820080012A0800000040084800004800604182280000000014F08E8B244B61D021424262341C413848691891A8128A4131286A983246D2412CA8124E28830AC048274683E289249428484A81A481888E242039481644C8844E83AA94814AE8142888354823A412293184528A83ECF4
-:806300006F03A0286981B21C2422E22441A1248B12104862C42D9289C18869582866A44844306B902218291484B28445082149128331228D444902188903121E428190448388B811684C2C2C8448052E97B012A6241460844E23141E4A15B8447A14A98236C8829724B6E28AC5182F28E4F46826184AF238828182299422A3E28128B61997
-:806380006A8418A364483334A4297258C42418128668344B2C1CECC234C14AB88835482F11ACB48867284A69199AF4213C10046F2281D226012A014602228420414448224A044CA84A85044E21902849259444904480042A218801888C1444B824218821918240048840A64142C024F02FA900102251180044410011981200244100468466
-:8064000094884782C04270222874260249A82840C44215C4124418100C00A048004626810800981281419779D04391215958246E822C1195228D512B812D924A0A19186B4A8D14A6B88434A821414B41C88F6C22321C1084CC822034842CC5141A9A84824C36848A36834B482DC823D8A2C1CA8A044F2A24B682B48CC4248952844381F82B
-:80648000272E104162184427122151405122181388890849189C8A8E44881084E948D4488242226264222C088844244C749284C88448908C00A348225C2248D042288A2C18E48893141628E8DD43C2141C1284618C2C41C2244D5898822B243011252922912430286984C44C83E22428741A44084F2804438826E84124C1211614C2344908
-:8065000068261C38C42C246881832C38443E422C04C984028141443F4B0E22412170649818688742444E2281A18091242A01248B82442F16D88434414644281414C892D09424120524892C0729C82C1849140C1280B24892C14984B984248218C8427014A882EF1A4142E48462818111444418818149823491A988C282400481205142162C
-:806580000251E041A842A0298493491C542C4213410822A242622014A428430180E1843164184D12892142F2AE71801442040012907220092141109C54560810243818892808805442460248A0251822448D840044002978A82481040081281048048044F4762420D6264204874287411247A2874324928421AB81414FA228D184C4A885C6
-:806600006458867815C8CA8C0820B12624D4163F289242184EA22E1412A30838AA2484A883184A22CCC44C24A91C8B248BA4C9E14114A82186F6E19450869018844601432621C46887224CC491412061441221B042B214344241185944D4842419128854484F82411406CD81302C4441C423462C4414381140C82412440012874422FF768D
-:806680004D41348200408144015282C0848D416112848B9420082004704A044C242448828808844394420024448941022CE5C10881881388010040B2848181F19E316012002002A0411082218414243245122130418A8414C1881440411145426412184684084444888B41C2C24301884892004382A41800200C4488DD29403884400441D7
-:806700004022440244848008C2658201101422888801804824084211444400005280384400801481044220440400F0AC8D2004188441212308409C4488902884482880082C11912248002818904113B1124484019488884144241C081044C184124C8211942441921004296A88DFBF06440021004480848191112094142C985412C884415E
-:806780008CA84125A28488004904408648A4852812186029121004410000138801801408C084942ECC24400214488005451204444B48A82285048DC2182005259445C0444A6888888E4A280082215884002840944242C88604442C2A22142218028009F0C48200800212C66512422282E08284912189288148014882442988911190811CF1
-:80680000342140C1811428C0888849929480280326026047114CC214202C810888904845D2240C48C7380041004084182218684848100C4042224404402244043084468864844218101882044C84544800C064188C0484884124409418E0F20DAC014843244808450811496CC1238242210844284428135823A034804802590180A12844F4
-:806880008E2885E418068E218062281C428245B41288028021A121488C125822F0C98B905447282351444B814AC8645645E42825F48148E5DC2148F881548F48F914D29849A444211744C8CAF248422AB44164465DC23D811F2688718592844D342B8841414A48A2212BC12714697411A8117D44443D844C81088ACD4483C4884FD8318C0F
-:80690000DF9D052672824C12011041A824A9C81483A1CCC7C46A9A882725A53D82178C4F28EB84EC127196C2C147481486B9816C94822F48B444E8862EA5CEC3F1B886822E256B8C17C643A8221AB8C62C64844B898F1D25B54CE44171120469AA198BC229F9D5DC3446158192486654F7522CD4247415B496ACB42AE118F48C1543F52406
-:8069800048C25A02237185D5247C4811311213741456148E144F6261919A64418E4C13C14C1CE241E8A9A5514BD846D64C646C4CA1A83A49B12482B4B2A1884A4228584612A4DF23031A12A621811A522C288981128C02124448142648A142142246242A24022216242294144A028091214119829121902118190219028A040022A042A024
-:806A0000434422817F4444B326F1371DA5FA37354FE3F967CBAF81F56C348F82F3A9298B991FB2F34ACAFFFCFC9A9C1F22F26B684F4EFFA1C1DFE1B793F72D2D4F51F914642F28F626263F11F13CBB3F1BFA89591F16DEABB292FFA82BBDA16AF3248D85FB23611B6217121F54F4F5A59FCFFA25873F1DEC26F713111F6DFC9B882E22AFF2
-:806A80008FFE64726B578FADFF127ACFC2FED4CCEFE1FA1176346F66F1F15BAFA3F32F6D4FC6F4755DCFC6F26C344D1417588FCDFC69F3AFA4DF33F41E9C1D42BF8CFD6D3D1F13F51D7E7F4DF72F2D1F5BFBD5F52F28FEE6F63F1252BD3F19F8E9791F34DCEFF256F4DFA9F127895F5DF5D471CFBAF2A7B55F44F446F46F66FAF7A7FFCD5C
-:806B0000F8C4E62F4DFCF1F32B315F7DFCDB894F64F4DECC4F2FB776F5DCFE6FC1F7AEFC4F4BFAD8FA57C8247B251D414F6353DF4D24CF44B438F3544C16D213F438341FB1B1CAFE49481F41E579FDD2CC7F5EFDD6F4CFF1FDA2C1FFD8FC75F54D542F2AF446C66F42D2BDF45341DD591B77CFF7F5B6548FABF7C2BC1F14D144FC2D2A7FAE
-:806B800048F284474F69F964645F68FB4E5D4B98FEF45ED23F1DFFC1C7BFDDF9C4D6EFCCFDB4966F49FFCCCE6FCEF8CE8C4FCFFF8C162548F257669F3955EE7F56F2D476FF7DF54F454FC7E623F289D98F8FFFD993AF8DFD4948DFC5F958DB2FC7FF6E5C5F55FF5CDF6F5EFC6D6D5F5DFD45553F3AFC76E665F4595B3F1FFEED7D1F1CFC91
-:806C0000ECCE6F4FFDDC5A7F5FAD7F4BD9DFA8F8B7944F73F7969675F1A196EFF6F7C6D23F1BFB51D32BDD5F7CFCDF1D4F6DFDFEFC4F6BF996F4CFECFCE68CCFCEBB94F9C8D2B762100221004800200882E088048A0492200860441142311001190898100488800888909410A441002009001A04008220B8850740144264244C3444304463
-:806C80001A1482440244455828411004485480084459044904296444884240140441484286A484448820044634948841805448411894CF35044D421F41522A1F41724CF21124A7241D24EF14D141B24A9921AB9451AF443925AF147925F8429157822F14F924488F54F9244A8D814FA264114FA2645D4FA2645DACE549C24A1F49D234F46B
-:806D00009124A5F3912487141FC9724AF1812CAF14D141F24A911D28AF14D985B44A3924AB9443B242F9244829F924488D944FA2D4390B1CF4114885F31144871412871415F4481111AD9513F148A112ADA14393824B42297934B848383287144F22E114F824C887112A6C1D266A1C9CE149C258868CE5C88465C88F2461484E1286EC241B
-:806D8000C14C4E969E48AD2259F44AB343F2429247822D124F8294122F8294924B12FFA403208804820018000080020000000000808822040014000000220000000028004008001008EF9E0E4F12052E142912041963244385A4188C9858C08847842B699815D8241188A82188431886F24114462621EC4231422C2AE26512B4841291440D
-:806E00004E84824E8825D484A4298A04118A2584328442272C8D248D14A886FCE7444032842185F439828914361A26C1921922C5811A4C3412244D488694C21AEA41444C982846784A05A8CF24E88122C8881846260818A6FC8112F0443316E4222C38482518284C7484788442D84841A8848285058F6F076C624C6C6282CC092B2146CA27
-:806E800044426B38C6A81A18857248B4A214C8812F6168A84116E88168C8A38C44D52464C53ADC419AC2A2E9F4128246C424156445821B68EB852B48C3B4A4B4422862141A64442AD884A8142CC886168C38182FB4021C05294164328C5434122E1192141287148AC484122CB194544848389AC4248052248D25588AC28281188118284BD5
-:806F00004280E988C2834C941470242298188481824C68886450688CB44822D84832844F610C144400424800819012122F248804124A0842128820041C080040082081A12800218400A028008800129044212244822002F0342C20C421652922D114D112B4312484E78894681941F241982D2C47814B4382C1A014CC3228232402CCE4221D
-:806F8000881231488626C214444B82888695121A321A4416A2924038188E425E82A81A48748212B81238844C6982DFBD06114411281842141901288AA1422B1430C3444D181A82440848CC06398C024924922880042149124484D81C080044121288106824C86908642480081624F26D7680E434524820741423A44283E421744834181DE3
-:8070000082488D328B124A984488498128116283009088822111844329E38801CA120229612316284AA2284481388A21C1628A21C2848CD82231A48216F82CB7304100260810648122244200290C8D1243013247224C22A8128524C24C2F4421432801C42982B214843212281A8862616041812084821122311818D02428018084F23EB4AC
-:80708000342C22420444A90114658301100843514342A084128446440800848724002DC812B052081624C2842484818A160283461848188884E8881208462C218142FC3C1B8061111311824494182324051C88214108A2814018280148620024446C04008C012188201116344230481800882328080020024E8888003FFF4EF12112164168
-:80710000942A4227C141A13F417612228C61814668411FC8D14A056881284E841E684D482246BC14F45824A19042C426AA2469A11A21822951844CB582B44821212624B21888088CE88812486645860800AFC8052984C211100489B1110440012482242200893934AD14002240121862442931882C21812914A4214B12867422426822447D
-:80718000818481865822844A218101A8844A21A92447824FA30520010028B011040080814403000020190800001200A0252001122001A01444400830484130848084098882004F3B07410026B83144E284119217805421603144184AC2144B144C84048002455884684B42188C342480216221288042B42241C2181082A881884E8A1A8824
-:8072000021189C4492418062286FBF0A20052001AD521B412100141813D4220222414C344442102A01402CA64280248202282C210412412118440082828E6842B014881808882C282882D84C4A51C88B44488B241326026051D04454446B223A122581242101242F2118A23118CB898A2868411884158485711858888B65484A022A61242A
-:807280001608A145D444B124E2C23A920049C4D418455222211AF19A78008002008001502220118844220400000041440000000000322800180000008229080082882800004F51018184421C0400222041344444282880010020145242129882884100141114848341288404442002884C18448482022D480000422129F118194038224820
-:80730000004502008041A4426A122A04423024242612228101C8104218021C2281410858180021210040042C2228088118001082F4EE190048000040A2144024C122001008420021A011800C00204101C02880040000904250628289120800200410024CE1934E020024008042020048124200811248422004000000000000001216020020
-:80738000240000304842000000009B2FD088314820144202122D1150444143123822104808482C042CA4112292862808001119125188853848824200810088457484B46448AA828210044002241AF1A97100AD58482B440081000081C5A42128000000101286B11481C884008046611218D088A4414A4402100200844D2C28284008001055
-:807400009242619F520F0040010021002C0400182458424200484410040000002C81018001882212801202250280082440282822844424E4AC0721400422210020012C25018148000000008002400400002200442041024002822400208108008800F0D67770123222400145021A21212111481218082B444A84E544242494445044464433
-:8074800018140480662300009684016B11251242C2822B888287880086028400884A1444D4AC0F204116012180D22301A0548B148C8441628185288482842604302442008118001AA113A012200124002904809882818388548A43A8C9008084F4ADEF240022242902A12722482C612423B112E421F142484A9418000000452402002504EA
-:80750000218082828221A112821E3210E822022348126A248E8A2B8498C881A022480043742B0E6F22F212222E122B111221C0123592822F31F111139BC88E888D888F18F44848421D4911489558884F84F44844474249F22424224480526445E442F326222D222AA1191AB88229E828592229F812131F31B188ED99588889F44848428C64
-:8075800004488558884F84F4F126F026226D222AA1131223011C512229D832F1111119F8919885F888414A2444511148848588F64844C5B444A62222228052424584F226226DA22E123AA1812B8882502229D832B11191819E8887818BC84A240480445888688FE203000000000000000000000000000000000000000000000000000000B1
-:807600000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000AC
-:8076800000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000002C
-:80770000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000AB
-:807780000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000002B
-:8078000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000AA
-:80788000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000002A
-:807900000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000A9
-:8079800000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000029
-:807A0000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000A8
-:807A80000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000028
-:807B000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000A7
-:807B8000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000027
-:807C00000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00A6
-:807C800000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE435
-:807D00000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000000088
-:807D8000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000025
-:807E00000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000A4
-:807E800000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000024
-:807F0000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000A3
-:807F80000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000023
-:8080000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000A2
-:80808000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000022
-:808100000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000A1
-:8081800000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000021
-:80820000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000A0
-:808280000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000020
-:8083000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000009F
-:80838000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000001F
-:808400000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00009E
-:8084800000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000008088A8888288888A280888888A8808A08882000000000003
-:80850000000000000000F0245C00000000000000000000008AA88882888A088088A888828A8888080000000000000000000000F08CE10000000000000000000080A888828A08000088008A28A888820000000000000000000000F0766C00000000000000000000888AA88880A8888A2808888A280820282808000000000000000000000094
-:808580004F6F0800000000000000000080A8888280088A2808888AA88888A08882820000000000000000000000F01D3300000000000000000000888A282888A8888A2808888A2828A888828A080000000000000000000000F0AB5300000000000000000000A0888A28882828280888888A888888A888820000000000000000000000F0C528
-:80860000230000000000000000000080A8888AA8888AA8880080A888008220080000000000000000000000BFE9050000000000000000000088828AA888880000882088A888880000000000000000000000001FD9070000000000000000008028882888A8888A2808888AA8888282828A28080000000000000000000000FF68094284844033
-:80868000084D18A0426012B028014088424444420220012128290889892274480483240284484D8848498804432A028504A880424EE421A228862814F2D2C8241362153971487152754488C66C611F4A44245341441D264C56262E4827222A840385427842A4422112678A25E488C48888CDC244428C048C984285B428D48433644642A475
-:8087000092224558246C46B4426323C21223C198CF21F89F831083450131F02418850211142001244D2260842322642240084128008768452882284486248204866244803218E02218244118281A041A822228018B14213FBE0F221429314983110C46A424490C2A5194103148281024820124844829642224220040048584140842894852
-:808780009488201604820080048C142424120A85F4EE9A800400414242284128002810044502502200000000A01882899488460800009048468442240422284124805222122B1223882108B7DF008481200400004C0210840290240000801142021A08C04800880010480800430480024410C422414100200896E26F0A210000000000004D
-:8088000000000000000000000000180021008800000000000020010000EF3B024082827348713A4411129851218C5518495422E8C3E81295544522045E84843048618C2464248A14028242CA012125743481D428084B848A7448628A95A21C418A62248A04A22B82269844849F2C4F91614D11448524522112664491821D42144250182C1B
-:8088800061228958829C24922484A0424C2206441E28418E4448A4C022411328022D241F44A3848962232846A214A08129B5867118A68149E441A4842241CF6F421141952281ACC43C112F4244B1C1714263956044312BA5EB82CE3B4624B42294249604284B426148482E5886664460A8486A49042847132B246E912B4843889628231670
-:80890000A91449A124297C548869244B528E684B24F0963BA04212411E24261191125028007048018140028951850083442844A8248444244288420024D032480444C13068922364882F2421C882926C211832A4880045B8E40D26020024194411212491180082421B428B14166824A084484480223218218248838829042800004D1282FD
-:80898000420082000018008200882228824B8A60454D1283412D442881312AAE48A81D48B3CC5A43B18A41C18682884781228B41224441004A82E843342483E9212E3144434A388A883E428B298D124AAA428F2A618D8D828CB544D882E9489528824C2AA44842F07F1F80524218C4304A80118AE1884368842C25A41A1341220C43A542FC
-:808A000016082022018A048143638D3AB8122244441822E929A4412022EA2831888542684C27881EC484828242484A82F8C7D9905416421821443111114AE28A041D4219388849914B46F8881490828C084C84624241A480A248432F084210A42890884429B28862A14A28C4281A84A8141818A0289024888A02F0A2D6B041E284D2840296
-:808A800025D81A02148984021721C1824942C9181CA3288574118841681325466181221B8284701892888E49221B8446180818D02844086415A828282941A4422618E488226221581E4484AF950E2146088382021842A014842518148202408881348243C2345284C1281E82858224084A511444124E28B8824B42182A184118288E8442DA
-:808B0000C81A820060614E2244009F480F184411124816262202302142128965818AA18400208404802822344816042684048081021141100C1A1421048418C8C01882881880888222F8293130214C428CD382761AA3121396484883325225628C8534888B84838249AC48428901C582E28421F38438812E848721C6C8842219022E88440F
-:808B8000365448266A948561E44EA88688915A49A1968B288298493242121286F88F1A9052601284C02400A021141598181218138131112848AD1143C3241F2284588528AC4491428024C14816848DC2118242124A28014081068285420841892281BB24E44402150B80212131182C2452222484800882400200818088024884842924426B
-:808C00001482029022502A128A226481A82880828A82048C0122222830422082F8A899702192241312153414954424B2410828111D54D04BE422E12114D84108587041342225046C21C11846146444C844924489584A2311622444182D441221822014141284B81C22B22C08D0370C421004002024211821018885A28142181860812008FC
-:808C8000004321010089880198826A212821C1242C09C800004582B81262A8801122282181F8CBDE002487228322148AD482213628A42CD8851D220324284F28422298884301882C84C2288E2800428E231D28249C64281018085424008D4181000000411228D0C22A72840860811225428494282480A4212283811198288382288488C416
-:808D0000484AA128482908841E424E284AE114A2248C88861412A868A58421C63230C2482BA422C2432834282818242008F026341001482014440142100288812388A418808182082280E121848806444066984118444084219C4880C41412A8208962868A02CC08824B85282C082D77E08522420126084E14101404C4216800C0438418A2
-:808D8000211C0146021992481180594140018684B28402212C82028042440815221142240129020023A442CB2A142C714112C411218D11A042121414AD11004681092008898122C8888880018608203818513024180022604118482E12122C084B586416C284884582024004AFD4084518841424322218C1C190884448AD251644D44224AE
-:808E00000825C444442364414C4194A464442D828240A13440081C14641886068674A881088D442428128C68248483DC48187848344AA19F87044A6242167A28F42A424226D4C472127468C889AB1135F285482AF1151827212B2C6B98E318E88AB1341284D816D488F66422216FA9A54C2884CDC84CD144A53BA1259E489E242BF1272C38
-:808E800014881B592312D144E1E3F424888D8C812E828C8AE88868C62E281F45054D526F24921453F144149FE1D425C2524F24D54194181FAA72D4F858848D8D2F66F848B41E4316D8617192BC54AC4CA6F44224874C4D1425F588D48163B164B4A49D116B816AD8468CB8A471A2518C157434B432BFD4B7627848F822822F21B4C229F100
-:808F000042226D24EB25876383DC4CD4287882F2A5597031B119F123252D138C92368F95354A8B228E813D22888DD12D1127258B482A847968A2824A5D18981FA5EC28642323F318583E2A2E84549F68F85822EE25AE621F2842EAF8B158EAE5BB6271E48273C87622D4A8A2E88AA58CC12F6CA31AAE888E146B186B722AB39486FC46B931
-:808F800014C0118480641260128C04821400822882544021C12540011C0246011488A0120011221190412E82118811241368220080224122081242928B241E3AD044F444258F81F21D6D46FA121A2FC4D4B1F47B1B77323E382F82F27ADEDFE4F41B8DDFC6F21CBD35D133F1646755D111F491818FF6F625871F367613FB26AC5F5DFD790B
-:809000006F2F65D522F68242AF24F692922F24F4B2192E231F1352291F1351111F12724BD811F251A18BCC1F1FF95682AF857E24B2FAA5A28F8DFD18888F87E981A1931AF296E7D074F4647C8FA3F33F2D6FA6F6163AAF96D4F5F453777DA74FFBFB128AAFF5FE574EBFF97A1FFEDEAD6F42F32E3EEFF6D6BFF486949AFF2A7F7F7EF8E620
-:80908000862F25F43F2F5F7FFFB32F6F69F9A2252656EA7FFBFB83876FDBFF2823FFD313FBE4F48AF1F3F5BFADD644F2DCEE9F1AEA49EB69F8989E4B22AF24B4ACF8F8DACFC2F8E8886FC7B3F4FD32F8BFF34EF145663F71F633261F33F3593F5FF6F6516C8FA6F66A2AFF36FE999D1FB2F2D3FADFF4FD1F95DF66FA389D2EA23EB85FE756
-:80910000FF46CDAF83A6C7DFE67726F564C26F43F127256BCCCFC6F6D5D76F78F686EEEF247797FB57436B6BDFEB72177416F7BEBC6F4CF68794EFDEF1C6B6AFC6FB42C23F3DFB5482AF2DFD2E36AF6FF7949ECFEDFD9EA6EFCFFDAAAC4CEC26F7429A145F76F639759FF3F33F3DBFD5F77D7DDFD7F63E7CAF67F76FE79FD9F9999B7FB9F6
-:80918000FDD7DFFFFBF9B7B68FFFF971333EB85FE6D6D6FC3BB94F63FF2D6E6F5EF465E3EFC3F33E1EFFBFFDB2BC5F7DFDE2646E6EAFC6F7F464DE46CF6BFAB9A2FFC9F11A1BEFEBFBD3713F4FFFFA6B6F6DFFFBFF3F3EFED6D24F65FCDED4EF4EF7CA56EF8BFBFAFAEF63FAFAD8CFCFFF9CDA8F2EFFF35500B02641D83681D4246181267E
-:8092000082643212C048241220C122828304004A028584B1480230228163229496B022499894844B121A048A24C248248A44A4484C62894C22882248045F250B499521141181114228260250812C18F1481440A448214118224A6928440069249C169046524908221004230621302682290129082C0124925084818043D3980D2CF51124DD
-:809280008D121FC132481F41364A1D24AB141D64AB9419B24A19B54A3924AF1439242F147934D812F924481CF9244A8D814FA264154FA264192E4A87592E4A9E24ACF591242E421F4952281F4932681F49364A1F48B24AF18124AB9619B24A19B54A3924ABB443BA42792498924F8B84F9244A2D6BC052CCD628F511AC83E241364A15947C
-:80930000161B69A74428AF443B85AB3443FA42314782AF14B914D412DA86D41AF9245A8D914FA2EC157A246A19ACF418252EDB96C45B9E2C2E4A9E448D429E2483E641B448C8248B948E2C8F46E141B2489A252B944782A9BAA4A4944F828478B6A8146D587FED08004100400100400428000000101802008800004001008001002002009B
-:8093800044000000000021E0790E6C01101281926210880188848D1298181A2858A245A818A0528AB422084548616883A54167212C22AE2862207388A48228A8148989E48A64841688711244222397A81EE622412284BF974123342112858115C814914A12A8C229830442468204A24A61848C4508C984A4148B145A02414AB2980412A05C
-:809400002860211E482788188D742D238E28200121A01C80089088181CCC8447497012B4422211691183B2425318428991A4A8269818821880487A14E8A885A143D227C4821E489C7434B218B414F41164A4E28B29684A0A16BE7818AA821D448B188CBE4C0A322941A4813272824EB22E8A188A7698F22617801441024210048302462249
-:8094800021042B14482B9490A248C04881808A4484210C5022DA0200A01282A028181E282732001E488190124821828912044110D48E0A2410042C81622410088F140110412141A44818009283A4480020624C00224694844288442581024C128652241A0282008541082220C2248AA4842AB4BA49B14183D2A34892218CC13983A4143BE9
-:80950000242123744AA1491E8423BA895342E64AB64868C68E24268102661EC4382B616CC8443628911423A48322E7294B21C05389698E46F8C8212E524AB888C4C24B85A726C6E84BC44E8BC1D3229288AF13011428471840312262488CF142211784304119B48121F911A643648825024365CAC822602260492B254D82B054A2186420E7
-:8095800063322E842941C2118C0883B188A22529C4C88318283228D8839416C386C4C8CF154AC172502A242A91188731814830122724818A419422848878418CCCA8422601304C26C468004C4648A4144A6848218C61424CD2248473E894621C24280817244E94A334C2493224893E818A82A2632417228CD18402463812188B41D42B433F
-:8096000047AA8902A7142889F94892908616421828E1256888481A542A20514A49848868468B4A5E244CA182389E44A88584981492458882C4C429180848CCC2224C2381F231A500461831112883821284034341C18824281332241A22C324822E842132435284228866B248E22805C051102CC4A1214826414C1102199424A84480827872
-:80968000989218482D12604283F839DE8005126722400422400A121A242941044609844922C148814814114B2583412402124118122180018130321C4228D2212455122021914422008148F03444702182F111221532484F820149E2F1E222B53818A3944E8A18A6E482F9186149C11886F4281489658C4782543E42874360C4278B492483
-:80970000C9C43AC4F461A22B1A4AC35886D824C38185A4878CB442D114F444821A3A189E42D068A22149A241889FE40F2905C11E2426022AE1810484E0815228130117814606293A24A9220826A2848C44C1428B252B124614021844A0214D11001F487224528122121419C282008058848B344860814C6282BFAA0D2574888101CC2244E8
-:809780008114122284C89898481AC8C28AF48212812288C04880C412904814823881800800281B81848D841A144222A84240224826443812218304430ADF694DA1241004113210528480D88212018C38412126C44411961898AC15D4A24444041285048908241601422E8714F0118646418991894F845212986DD14812201608822881825F
-:809800003F7C042892004214122601264162298021A12820012682428402428C02C30442121A068344246413209848464821C2226200002428008849064160442F280720421423482A044841234129C42241445CD11248084422422288162272216284861218B68412C1281E8220484401441A8818848271420826884818C4487052A84153
-:8098800084A8CFC402001512410284008410B128018D428448004EA28222121A98282B824228A24210B84892224220052904004870193288212302821E6218002088622826F1263A00198404314819B24A82B2431A82541628111B42224221250811448021B418A8146951424384482414B44452412A14B422684228A44624883548484B7D
-:809900002CA160486C22042E144C84C4445F7A4CD14205128143822B14344C41002C3448C0142149B26401832504433284D144218081216418C9682114104741E218219883830111881C31121185042B846CE24801882D24F0AD1280216882428E420024148CA84818414662134084A1280041422C2842127814486288C658423082A6C14F
-:80998000922825A81A489028412CCA5460934C482104441243CA424302001F940F841A82241202291381028C61468692294130B10086344484238884014A0A2212212446C12423D4838288444A022D422880424154812817218A448208AA01922B41F0A449247A74D16862342FF87298D11136432D2715B1D2D592F2EB8B39F11551581F9C
-:809A00006AE856B58234424FCE93444AF82C268BCC8F1D14EE44D62E7284F692564338842F447624EF5CF47244541FC798C24F414365728972AB7EA1FB48218D816F787582738696444FA874ACB856F2541843F1A44F45F4A7B710A23812282AB46286D14844E84418A89E4B51CA64C45B8C4F1521F134A69FA2B21AE8C8E24A056D2A283D
-:809A80007E542F82E18B4438488F43E8A4FC89881B753BB21F2872AA42E2A8F2CB89ABA61B24FE824F15FA42D43B522E441B852ABD581EC2244AE86AEC42AE4289E928E82845D1446312D9914B53C412A7272E23CB46EFAAC2829F21447418BA8AF23A2729F686A24E184B88488712C9B2D12C7226CE2AC7314AB15BCD882FA4F728244742
-:809B0000222B8816C21159FA86211F1441F2854AAF89DD428195281E8A3FAD0197842AC19E2B872F6186318ACEB44AA266BF360D441844400444004008000000C0256014501840815118181400002280481804004100120020019244844484608144CFAB4C23F8143CD7B3DD6B8F84FCFD7DDFD1D511F4656D7F72F2733B3F34F1EA88FF3B
-:809B800094F953F5DFF2F2A7F77DC7EFE1F13B1E3FC474A4F8BDD9FFC1BC61FC2C5E5F17F57DEF7FD9E5F9D4D444FEC2622FBCF4D1675F63F2E1211FD1F193F13F33FA5757BF3EF66343FFD7F7E7F7BF187869FBFB8E7F7DF1C7E42B45EF26FA4A12EF24F93BB26F835288C1A5F28955144F43F6557DDFB2D153F24CCECFD5F35C5D95D983
-:809C00005DF22F2F3F73D339F95A3CBFD4F95ADDD7D95F3CFF6246DFF7F77B5E3DA6BF9AF6B999FFE6F7A5CE7FFEFC775F6FE6F7928A4FF5F116559FF4F7C2668FF8F4F97F5F67F6A7A73FB1F19391BF35FCBEB67F26F6F3B3FF7FF7ABE3FFDC58B9BFACFAD757FFCCF848C8AF26FE6A72AF2EF9626A2FAEFA3A288B8A2FA3F35A65345F01
-:809C800055F431659FF3D1A9F22D2CBFD3F35B595F54F66D64EFC1F1D19FBFAEFAD9B8DF98F8CBCDDFEEF6B7F77F76F56E7C4F5AF8F2D47F56E48FFD647D4F4CFC6DEF6FC7F4565E6F6FF5C35E5F697418FFCA46EFC6E6C5FF34A63BF9BFF8F89F167FD3F2565EAFEFF765EFEFE7FFC7F7BFC9F97A38AFA5F3DA58EFCCFDF674EFACFD7E48
-:809D00007E4FA7F514B6CB636FCBFF24884F6AFF1D42343F19F42D719FF3D131F241636BB4AF8557DDFF44F47E7ABFB5FDA9A3DF9DFD9BD5AFDD7D5DFFF7F76F67F57F7FE7F2EFC7FF2E4C5FFBF924AD4F44FC6ECE7FF2F5777FEF6AF95D1E7F6DF5CA5F2F68FC49CE1FDBFFF5E76F6B5BFFFF79F95FCFEFEFFFFEFEFFFEFFEE76FF73FFA0
-:809D8000DB9FBFBDF9DB9BBFBDFDDFDD6F47FF5EDECFEFFFF4DE4F5FFFFCE4EF4BFE34DE4F66F72B4B302240416812482AC148349A442349A1493413C8261B498D228A9428139828824E24214614D34892838384199882422B8210026D91482A2841A148248E48348E4864842496088AC4248246046EED80241108A112A501A14C7248011E
-:809E000000218CC431411001484448142648C158445844414A1284D2142148C12489012E11CCB22CA8292D812814202441A4424443022A843124B9032D421F41D228F1112483F41124A3D441B24AD141B24A9921AB9451AB9443F24A9143F2429147822DB14F82D418F9244A1CF8244A87114FA265192E5A96C54A9E242E4A1F49C2421F25
-:809E800049522C1F4932481F49324A1F48B64AD141B24A9921AB9451AB9443B24A39242F447924D842F92448984FA2F48A91C0421D6C8F22F1116483F41124A3D441B24AD141F2629419F24AB459B24A3924AF1439242F1469812BB46F83D41AF82452984FA29C884F2265182E5896D5B2E449E2B264C9ACF411648DD21F8932681F489208
-:809F00001A8E64AB141D24AF4488F24AA449B24A3824AB24222F246983986F8284F8225AAFB20684824800000081402408180000200421008008000045010080040020010020080000000025017F6A055CD412825182400200481A84688141492CA224F021881123EA81826124448584548420984443C11EC14AE234A1211C0821884E23B3
-:809F80002A7C12081AD422822C417128C48872444B289014414B849F724B02924C02458323E28892A5812AA82448560856A218281E448B438CC4C4A222882CC214428A3514128E22225A8881388416988813F962121881136E28824A5128882981A9124C08569288621428AF290E46256D6184303221818E25484B21E82A219584582B832B
-:80A000002236E832E422B8E881A9252D84C3985449A41886C4441F6148D84835581B144A9889A416A21E3F21B448C8812CB8143812AB428E12E0416881430E8E342D8A4C43B174F8F7AA5022192202450122A840A884304845282422044E85163848412800260284421812221E242988C2821E2418821C082228AB162084C682C011268855
-:80A080002A4184044844F038DD002008880080080000000000000000000000000000000000000000110010011400775E14132214024C114CA12470129A14488712842B842449041F5211C482A0242F814426DA14021E188551812B5883014E252F223C11A0182E84C9422794261548A15A1A48180869A163008F624A081AF4DBC9104218E0
-:80A10000D148311440A12485584429F1316144F04682844829E12328C82522421E484B8817522C4218A8414638838118442CB852921182888D2426218452C527124818D0EE08482B1436D24428A8918D284B4C2B72002008880080080000000000000000000000000000000000000000110010011400775E0012181224281C9121C14002C4
-:80A180001C2809402401C084430222508481229012852422082002408421281201F04812404248014A2808128942C824484FF9011B144124814F8244F328424341E151B86B410846345116A921841CC4244A6115830D64224116914889A48400721A8C212328088C21A54128CC31A356222881C888364CBE88410C6089225FF2091C4184A5
-:80A20000311AE4111992161558218F1442C881411C558136648100468462811094248440B818A4842880252581014112825A8281022D11588218004E384192839128848A82F44F8980240180C622899521441E841821800D18001934241AF84411C8225082442E114221C480282228828288088301190487418B2C21212538818CC8848667
-:80A28000184A04C01C227F190D46044A116225902AC01290124418A1899283412847814A216121493488214A0188894492516648822C8301418688C11443C4512210C81442264868252E88448A11081810FA657A608144838421C2146045001952620049334442002048122112C414121A0841C011124490684A032828C0224D2200134C57
-:80A30000062A2115022420811108219FED0940011410088552482A011F8201513018D0488108831624018C244224041282000041102801A881201D8831218800284A2164824C028041F294A6E04441C118211E221226E82164C126F2112236CB128149B1CE8164821A88A5C249911583384868168401442F15E88126B14288337428C03882
-:80A38000284B288D665B122BA1B0896132428CC11823B3AA64248CC824100881BF960140041321441C424C22010051811144435148901820642244418034481800100420112C8821014842844212882084841184638118121824BB4C004100408231140030118014C2423CA16822840054004412454818022011022184853221BA0480B231
-:80A400006A21321191812028382882388132A28123F188720011444C0413018181233818298222484A0813014914D44195582728821984948390141A044C04481810814121836214471843180219418305182C014A09A012C83F8F0F00B41652284400100100803116909445414281035C042415C24125BA1814CA48241914A241198201E5
-:80A4800024244642084291238202208202422A810284222F9B092123816414B0284418816142218D4216180110CC421A0882842190448CC284901188606122459834881211909A9028001C2114488153488A1482025042008978F2048A14341411168412129821D02102128B1411A42420088482532244584213A28448142046A8241423C9
-:80A5000094212C62111098588681082822C0812181004810022A44F3214AC0110084104141450E12197244092322A41415C8485219042C0518C04849110348A06180C428424881842220E512511C126061818968212CB818982242A081A0424F1D03004818834214086083E041082011D48128D22111889128218684B8118248684140021F
-:80A5800014892141018160121388C8224400128908142280C2828A022210F2CE1B10019C41341125488152411544484211418801243026008860648A0418D0280422E022C12840244202400248428B4240025A22642100210012811F75098C7112813428490280B412E281145248A0211904404848E28834442362218C51284F82014211BF
-:80A60000112D88259D84412628A1C1898214889818848951227C01890389411CC814849889718204BF5F4562312F5811FD491145DAC611C2241D125FC87118024146D12BC1181AF181821B39483FC4D484C3824F1C58A2478C2147142B1145C81956E8E2A2142F212154819D91218B888B128D42183F41F5A4121D528D1817212CB842356D
-:80A68000282A012C74223232288D158F88F849281031119CD1E636289F1242018B23AF22D483F151A98F95612812437543F15821426F6641A1419F4663214F4CF812224F27D2627148AB1423742832463E8ACF46A21A4E253662337815A2828F11B6CC3811A7861D21890B8B815AE321EA22FA12846849E281E981C8427FBA0F584116245D
-:80A70000E15163249D18DF9154D61E2128AF2291239B5166D96AD4ACF8225CED8B85B888F969844F11D44294489F52D4D9F599C859F49B432CD442BE18D54F96413B613AC1289D3837972F88E28D72E3EA92F2484D1E21235396BF91F185288ECAA5FC9A186AF3D89898A22E622B36FFA20D420025014A0142A0848088C48248881AC42410
-:80A7800048002812100118008614218821088220084001881AA482C08200413084308410044308DF9B485367655DB9BFE3F263691FD7F655455F66F22A6C2F43AF881F3EFFB9992CBC82FD84942B111E838E895F9EFA9391DF96B3FCFFD8C22BC88FAAF364785FC5FC95941F68F9C9CC8FACA4D58FD5FCD5955F55E481BB18FA19F187A982
-:80A800002F24FCCAC24E728F61F71FB4DFACFE82A3A763CF68F88CAE6F63D32ED16AF1CA4EEFEEF69A8A4CF1F85C2F22F8D377145F75F416559D1B3FA3F72B2F3FF3F2564C5FE6F22A4CABF36F4EFE39331E342CF892929E92AD188FB1E519F9B5B13F99FDF3FD8BFEEF6CFD86C82E6A4F23F551D3CFE5E5E1E54DF9F1534FC7FC76DFDF54
-:80A88000FFFFD4F45AEF21F993B39F31F9FAD2AF2FFFC97A4F68FF17F48FECFD83B11D371E12BF39FDBE366B116CF35A4EEFE6FF9E8C2F43E345F5F6D69B363437246F717417F93C24DF93F3153F7F55F121632B323F3EF321A53F17F75B7B2F2DF54AD86745BF1DFD56956FFDFFE5AF8FC1F57F69DBFF8F2CFDC8489FA2FA71787FE5F574
-:80A900004F4CFD495F2DF55EFFEFC7F78C7E7FD5F7D7D51B738B39BBB1AFAFF77BFBAFADFD687ACF67F7BF363F65FE4363AF29FA89839FB9F83EB88F6BF92AB2EFAAEF2EF6BE9C2BB3CF8FED2EFF7A72141F35F51717BD1BAFA7F32B2D3FD7F75F1C2E6AAF82F3FB3B2F26FEBBBBFFA5F5DB1ABF95FD5E54BF3DFCD2D33F3DFFFFFFAFC1A3
-:80A98000F5FDFDDF2DFECD83DFBCFC6A6A5F26F7DF4FFFD5F597DB6F2DF55AFBEFC6F7FF5E7FDFFF76741F13F7B81A3F2BFB79F99F9FFFD89ABFAFFFDDFF7F6DF77BD2BF37F79D9B1F39F9DDDFEF8BFB989C2F2AFBFEFA4F66FF9898BAFBD4DA4FEEDFF90F006D11846F3241081245638126628124122041628944137848244124584821E9
-:80AA00004439119812812B12816B12D012012E11C013842AE181442321C24820496281204122011228821FE20382440040941C12A0212A01872412248C041AE46473140813AA8482B021244468415852184604424D11284018A2412C88344828211118842714924088C84820A81426F93DADC0421F4152281F41724AF11124AB141D24AB78
-:80AA8000141F48B24AB981F24A9253B84A39B4AF1439242F547B24D812F934481CFB244A1CF8244A16F1245A96E1A26C59ACEC49C2DA1F49C2C21F49D228F891248B841F49324A1F49B26AD141B64A9921AB9451AB9443B24A39242B94478229F92448984FA2F4226C50A21F4136281E44A3F49124AF26D141B24AE148F24A941B28A9BB62
-:80AB0000849298B2A918D4427B34D812FB36481CFB2652984FA24CF124DA96F124CA96C4CB9E24ACFD912C2CFC916C8DC21F49B2686849A3F41124E382F64A941D248BB459F24A9441AF4413F4423447882D346B424CF1A458DF1407004800002200000080040000002004880000400140080000400200000000000000F09F9314603240F4
-:80AB800041E5648253411148211431424D12122568845CE88108435414492822325227232CD18134422C6184889011328C1A492484A84B2FC4C152806884211821632182418422829484AFC54F12A4188711442829116D251A928213B882218111D1812891A427A14626648832F0824185445114444B818991A238212512147612032FA8D9
-:80AC0000E118D36102882968268B24881B8580A24829EC8AA42446244481F2342F40346123114135748F41D24131114867281522A3141671829112423D148D92248934111A28FE84281A741295144655A213983888A572117472949884C12F14E348C212CC39126394A82ECAD81229F25284E210D42404481E828F12092112854164225097
-:80AC8000124827228214921440648181478A8D82492434844C522414241426022D98522E12422100702213919282348A26A448268204110024B048AB42282A0443F2DC8A1004004004001240C8828648032001A0A48281432814211134484880012E1846A49228200128002220A4482048140400800242229F8A035840D32872142AA341CC
-:80AD0000184A6186326E9383A54149B511EC4104CE145F827418B414644F26912C41C9F42811984D39C355482ED84A2801921B284968388B8122282C6444392BE294091B848CF222C82C72C4E84966488E218286B8C502444011420A1A84018921B12124F112C84E15192C8501414B1A49E847D814382814569C1C42418C341C1E484E18BA
-:80AD80001684A21213321486A318288036424601932438C1874248288E444A8B0AC8884F1E094A01D02832141E2400524A82B218F84288408211044CFD28418324452862444190218E181F863114A0828A22842988880889022250249A222E0944248B82508244411B826082CFB6098924622412426FA8810487224CB119441491C24C52BF
-:80AE0000A6B84C322883146C440045DA18D12C92884E881A321414488035228434A04216022659422991884243681285A4C1502241214921C24C46F4962D301930491441400400211D3412168102C012121091A81615024B16802C812448A118415187284A618A1E848484C6141468441143012A4802460884008011FA33A340064C01809B
-:80AE800028D3823144A2008284C0114628140422904848001200C0482220040012002948088224481423614448891204A021849822F0C4EEB0452162C1312C44C4142331682F6289B11142E18449148C6764C331488382FC144842E417C24D28898488D4848D82984419240A14694188D886742448E664314916A38159D424E482CD484083
-:80AF0000B4226181328B2485F46DCE60284021116481234618048714C092112413918A3228407524480180241132582A012005165422128B92826662818811A908884820180864100A44824C81D4184B023260222E111C84342122821420240880B24132C428A028838586A4248008A813289228A0B48002125419D32294482C0A194468BA
-:80AF800088821410042410240466F2E8F820418412C14C21106214718125C81C614421842118252C23016022942C08A4812602468342A22424A2248C02111200292801102AA18441698232221288F044D424A224324C04260C002A2108888C048A32114CC123484C2281028A4214641894138102482908002D855CD21604802A824A011454
-:80B00000130489082288884AB2243844F0ADEB3041508116421402002065C900199B144A88088008431804C0818186021284926800822028124834428541082014882A128C088C840812843F420850814181186445E2410261442C4454232450421724C01230898124157621062C65414839D18214721832C1642224120014178821432440
-:80B080004239228246012885D4480444848123B2EE0416966448A02414848042881962189A022032228A618818624248D85E888D82004C0813434945E2811C2102A4486648C44428460A8128450283248422014828C82C058410881181342170112C1849B428014D8845114868C490811011110813168404840020912100888022018CD81F
-:80B1000012014A0218844221211A5882121823C112CF6C021F4224082284A210112233422A042081B35508281A224484F2882500449C22982448188A8139285C014148803122408104210041208A58828A34486014818F9F0940C243918284143044150896018F414641014D18914444B08681D14801890913444904265141448C68481962
-:80B1800094252C446D41284484296844D01C7282B22C08AB427024318222A912E4A90D1F21B6C8E2D1D231D14172265D481828DF12B8C528D884394847411C7364B56C742D7C487424A19BF6C8484FCABCD9F4314C1B41D7241E4C13A242AC73512D84024CDA64C82183E236F3984417C8A5FA422289C2488F387846086E6A45FA28B835EC
-:80B20000B2A284F428592AFC1E8FE016F18114A5B21CF2981AA83D4223D222E1C9D322F442C8A7683FC8F9221243E3291DF1D2B36F83394284CD75175387242D2414E71886F1AE834E8C2D328BC86B929D822F4EDD611AA27A3FC6E4D1F31E441F86BA268A1128358B53C4814B22418BAA43DC84B248EAC2F25421C1FFD74A5346472213F6
-:80B2800062866F16B449C4211D25DF5614F218199B311B434B419F18D843D88BF212BD48289EB44D61884F2CC22147B2C5E2A2E8819C211E339781728E22BE745731A2573A1711C5724312117248F361E41F18DC8324C218976AAF8DF88A842F4454628BDE4D145A69285E2ADFBA08501210022460224002241A44032440824402441281F6
-:80B300002128214221426183141258165016100649415834484D11842C014C81C414C0144844504840F448A5A0232E222AF233319F12BE22548845B472F729A97F95FC63B19F591986F1AF8D5F1EBFA3FA31392FCAFAE1D19FD2F7B1E16F4BF8A5AE1F98F111131F16FE95971F1EFE24731B11DE628F5CF49992D071DA55FA91B71F1C9CA0
-:80B380002C4CB2D1FA88B6BF3DF917111F12B372F555D33F3DFF22B62F2DB932F16A8A3FED99CA6AF47858AFC6F4AACD1417139F93F71534DFD3F369E92E68C5FC14145F17F7ADA19F8DADAF9F59FB95111D14DFDBFBE5F59F1AFAA1A18FCAFAF1F3AFC3FF39F17F4AFFE5E48F84FC1119DFC7F79D959F9BF939791F13A33DCAF3D9A81304
-:80B40000ED14FE84A51F59FFA9891E311AF6D3AABFACFF63226F46F66339BFD1F38183AFB8F82A3A8FAFFB7E1EEFEEFC9AB8AF2DBF62A5572F26747C4FE262F23373DFE3F33F279F13F66A62AFA252562F65F76F7D3FD1F83BB33F18FF1F5B79F1BABBBF1EFBA2B23F1AFB76727F1EFF3F7D5FDBFD68BE7F6AFA41C3AFB3F361637FF9FD00
-:80B48000E1EF7F7AEE38FCF27A8FEEF5B7FF4F26F427C71F38FA93B39FD5F52C258FC5F35FA72F6AFB4747BFD8F87963AFA4F7CFCFBFFCFC96A6EFACF9A2C22F27F9B636EB46EFCEFCECCCCF6EFD448D343F36F73B33FFE3F33F36BF37F76B66E5FE17173F77F76F77BFB9F97AF2FFB9F81F1B7D16BFBBFB63333F3FFF9FBBEFEBFBF7F5D9
-:80B50000AF82FF3DEFDFE6FEAFEEED4A2FB5F57F7FFF79F5BFFF7F7AFE82C3AFAFFFEE5E7FFBFF77776F72FEA7A73F7DFB7F5C4F57F77E6CFFF5F2EFFDFFF7F76A6EBFB7F24F53FF7DFDCEC6EF67F6ECB6EF26F4F6F66F7FF7FE54AF86E422F6E4E69B289014A0128449410840A141C04814160892448C442409114A02421144109811A0D6
-:80B5800012A082A09280082E918C0448228400348C048428861808281281828FB20C142818E014814281921419820898484C2802324A781488A2481813C8A484284D189222C018122081241824411281012C282806248224224A1814022B848246044BA1C0421F4152281F4132481F41326A1D64AB141D24AB941B21AB9459B44A3924AF22
-:80B600001439242F14F925482D914F8BC4954FA2C4814FA2E411F2244A96E1A27498C54A9E24ACF491242CF49124C5F2912483F49124AB141F49B24AF11124AB941B29AB9453B14A3934AB9443F34294478229F924484CF9244A2FD90C2D421E6CED421F41724AF21124C7261FC1E424D141F2689613F148A649E62439248F2439242CF943
-:80B6800024488D912B4BAD954F82C5916F82CCA16F82A129678287512D818F4952861FC9D286F49164E3B291364E1F49B26EF1812CC11D24AF467881BC489224AD8443F24A84222DA447822D842B424CFB245A3FAC0F84820000000040040024000000210080080000140022884904004041020080020000005012F0D427100114842921D2
-:80B70000E421C4144724558255328A51281C311A223B864192C7191448814C1298152182C8488C6522848A921416621B8638526E1143584213F241221CB242C81857843022415A4294861241CC9888FFC70E432528D142C92A2A91211C88324813221571122474412435148A7142071E848846C242454218CC1A16EC81E848C2182474CA64
-:80B780004204228614B2188292842D84C6E8128188C9414E18A26968829B1249E483E812047F2A051F4124CC12A48331422AD4434954C36B242D12139B161D428711184E114522583A1981FC18424B24C4E39182ACE884B988F44518872285D14AC8344AB182C28A4624E44892221D841F44322D29A81A5F8411313A88CE2489B21248F29E
-:80B8000024984F14B218F8DEA90040E14128A2211C0162481C914140981249E42432A4985B414C398400104251841241122A28011992C2441C81C2921B2189416422822B841B61818242486C22417424E944018908DFA406480000100800180010022B144100882218000000002C24118242020020214404008018010000800818D0FB0E8C
-:80B88000C03485923448439142648B14B04848B84A41A484448122CA21921100418AC2482981B482C148230140024A8101001082288432882281244A293298282100C18226F8E14E00448144701492482481B0C811384A412944A414418A05862182018848124829C94220240129C2120000184882809288288C18B192041E88222180486C
-:80B900008C19F83AED2084032B124800414A010012204812880222120044228121008118502200421800400241420000002800000020F2CBEF40011604000022842200820044804C0C20140448448110841284622218800282301800260227160010040048124C01003F534E0210011240C31183018410082C04168801C01982C0A1411C82
-:80B9800022624181424908A0181004641004122F4411280148C0812146246124004800F06CD240C412100814400412111818000000000084000011304290128004004181281008000021901222128C02004885F48CF910652143110814244C1118D81882C1188224901C205884160848C31A0422129443942290122E121A044092848489E6
-:80BA000021C14889423241429082442F442182312218488044F8CBE6100214800114112A2101002004202104148210011B42444508604C412888108412044128241644222102101102184883044C0110F42D48000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000045
-:80BA800000000000000000000000000000F04FFE004800000000448002000000100218800800001400848004000000400428000000002180F1F3B5000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000058
-:80BB000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000067
-:80BB8000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00002800BF
-:80BC000000000024000000008100000000000000006024000000800481004120210800BF760616042800002F8114042885020089041800C0118C0424B02424210248008A0232412922A2124282230118001118244A084A0120822102876D00501681291182013CA281800880611128A18492892428024281A4144D4A4124A6041604004C30
-:80BC8000414211B21412A82883048B58100218869482844A6984400C9F8F0E1604280021182F811405288D8200D01865228C01001E81890624844934114E2A2004A0282043942626E22221E4487212085260841418244AD924A8148038281822F0E82E00501684290100262209008001008192830400429028214441B026084901001840ED
-:80BD00000118A08284204902002018A841425048F07CB34042840100141A04124A110180094A0889888411815284D0A7942818004424901420624141822521D914E148E2242189014622D8282868248012042084F446DDD041812282B32281B52495261FC1B68C663256885812348133631D4313638A4F84339842C30844178445FA7C8116
-:80BD80008CBB3664482B824C1806271126F1289426BC82961A824CA4A4AC88612440C6AC9A46682A89648C8A22F8E2B1901123820238C0441A24A2694837814041413851D8169C4222413618047167828C0447168CD32201442444125486B298422213CCC2A0588688C4828642D48408000062F038341044246123A0411F2231249745C1B6
-:80BE00001B12482C0898212B82112A18E181F868118889D4486884301145B88A61484B4243B89262482244233121519E2C5C3CB218D62442622148812C28B6B294284F22C848C62888FC18FB80C4144B242D2148A4501200604421898DD282B9180418641488167122268853282642048216847182F524114CF4421C116144890822B9C863
-:80BE800024423B4247216681644448B02624B13414544825F8554600894429512247112042218141044138448200008C0421E41800148994111C04402821446882280025054602308422882912228128C2884830428F5144C31100002034188150923011206434501411A01841412042244238286CC14890242810011AC291214B24850449
-:80BF000020F1182118A11281824CC88840022A01445B54D01241C42C1248578129D4921108B3218491D82CF51489831864119013C1444CB28E922630281146E614011662481F4172511634116F1192228BA430231C6845B3D2221488B188B4226C482C39443267834B344446FA5422802441932125028042210150124180B4421101418802
-:80BF80008AC41100902825D248C2188398544C2202203128861844144C148AA2141B212C994110344284A8A0841018D4CD05214601138404444414E3024024810421218889C118398101801101204284A21243021880C219408401002100490126089082A048CC662142CB4680241153428422484A82419141121C1C012214C883441122AD
-:80C000000416631442E01601565521881480041C2A394248504129082F4284043358B213843482811E48840062F079492424225120622110483188A92802908483E844183A238249AA281938CA494882911823C882284E81821A38848816A482A684B111184202180018182218201288014068486B4D2002A024254401604221504133715A
-:80C0800084825114601212431231112849426282483011128145487421B812061001C1685338240086481108810040E2626884308284FFDC028AB1418202111484002858218E2211812744278140230522854142012642421201200410046024483508459122212210166218212961224026210846F17D819044241A3431484962414210A8
-:80C1000014982821284A022244A51441410C80221152811518148242042219D21462A14C4208251268C883C8868D841428614782842003260441F0E5A500210024001848481C8201430400DA822102004661849111284A0244231448442221482401281A86C441412033188B8400884C0184828B14728178108401441688D112E541128458
-:80C180000C200133F862811D2414A08423850C2E882618022384F1C2281608228A5461CA82013081836488C8112A88C411C21914083012688A62824110742F4A6192411A14922400942E18112C6A5842291244A88416E84A14EC42082DB44449E914A294200E4EA1818718A48A51849045862131942828A8122D188DC428496241230188D4
-:80C20000241A041A7A82A8282FF1052F13E41DD25251538B263641E481F679142DEE9F1EB433F2A24115521E2E883F68F416691BB2BF93FAF6242ED81F18F22182C71E978118BF3296D25F1D346CAF4288FAA468C87F4A43D418C2838D1D9F81FC81212BEC35B1B822B412714F9344DF923118A72843F2CA284F4BBAC4A15A8E69C47F8D34
-:80C2800009442D521143D741D563D21C312924C3C8AA867251B652682E9B284E819F2CD816A41899B99782F9CC182DC82D311A64811F1BE222FA9228C6F9845C885B1C889E911574D6A484675E6F4419F5E8862D94E7888D21AAE8A1C9862B32889E2824AD582DC81AB264B9C66852244F247221E421C2624588B152F444144D211716182F
-:80C300008D119845E541FC4647CB322A71D8FC4446144661E35CD661E2267463A31446DAC2517168837219F632261AB425F2B4921F82A7412C7338722886D22484FF81CA1E18B75429D4A484C1123A45B228F24C8C83F128422F6902B0240161901484148C642200001608844400124C220100182818100443022A219414901210841484CE
-:80C3800014240148441220014024E1440246F43A6ED071F6533C246F61F15A485F71F263258F14E1E4D262F21E191B742F46D554D115F729E53F75FD6E572B154F5AF8B45A9F8EFD3D8D7F47FE85A885FA4A588F95A49ACFF8FAD65CAF88ACA88F9EFE77315F5853848FA1B21BFDBCAC4FD8F9CDFD6F5AD2AAD664F92E288B449F4AB88AA4
-:80C40000B85DF2ECBE8F88F88CA42BC8CF44D664FF2C242EA8EFA6E2690B5F31F527494F63F23737EFE77423F3737545E425F52686AFD9F14B782F61D356F145572F46FCD5D77E526F65FFE7D55FC8FCDBF9DFD9F9CDFD5FE8FAABAA9FA7F779FB9FA8F93F8F7FEFF5AF6DDAFDF878EFA3F335251D59DFC1F21DD4CFCAFF8CCFEFDEF9AD75
-:80C48000ADBD6AAD8AAF48F868E19F34FEC8839F9CF8ECAC8F88F8ACA4AFAAFCCE6E6FC8F26A688F82FE3E7E1FB40B3F72F6357615F33737BFF5F45F6EBFD6F26D359FA7F32F67BFF7F579DA2BFD7F79F99FDD8F56F67B7FEF67B756FDA4CF6FCFFDFFF9DFDFFFEDFE7FE8E8B2FA13118FB1B1B2FDECEF2FEFE59CFC94B4FEF63FD6F715A1
-:80C50000754F1B7618FFBFA5CFF9F9BF3FFFDFDF76F24A4A6F62FB7A3C8B441BA86F48F95D58CFCEFF383AEF62FA62C8CFC5C7F8E7C28F82FE6CFAFFCD027F31F53F1737111F33F37E6EBFE7F77B7DDF52F2595BDF62F47978BF87FFD7D17F71F1DFDFFF76F63F7FEF27F756F6FFFEFFD7FCDF9CFFDDCDDFFCFC8F8F8FB2DE33F5FB6B9FF0
-:80C58000AFFFFFCFFFEFF5EE6D4FCFFFF4FE6FE3F431719F1BFB392EFF7EFBDEDD8FBBFFFAFDF7F2FFE6F62EBEAFADF96AE99FB4FDC6D7FFDDFDECFC8FA3F32EA6AF86FDDEDE6FCCFFEC6CCFEAFFACFE4FB505260114D0120126A141432268328E482008486C022C0289329189129128318384912821893224A092D012092E81D022414832
-:80C6000041782442088C4422484288628928828B249242826FBA0527181265A12123668161001012E1242141052F1428F14881C0948018856822400849291C12886848264184614860482E1386048028918A6064822C224252842822856412BF51062F22F41124CD121F41324A1F41B24AD141F66A121D24AB9419B24A3915AB9443F24A8F
-:80C680009143F2429157832D914F83C4B14FA2C4814FA264115FA2E519F2255A96F5244A9E242E4A1F49D224F591248D121F49B24EF19124E3F48124EB141F48B24AB981F24A9151AF543924AB9443B2427924F842944F82E444FB244AEFF30F6FA2F54124AD511B21E3D4419212CCF662131D6C8F449821AF449B252B8447822F1479246C
-:80C70000F842955782AD816782AF54FB24521CF8249A1CD8A7F4882157A2C6F1244B9661A217CD45BA8116ECC9762EB19112AE28ED111B29A7461F48D21AB311F24A8532AF4428D24269832F4458822F44CB1AEF170F848084020024000000000000100800800844004001408888440200000000000000001082F2A12C00198162134F1190
-:80C7800094312881452901344681447438D42265845301107148E4283224C582B122E151AC1A2988D182C5822E4249921318824D38C94467C44B219F21B21888C881CD12414443E144014D92B6C4248B344B84DFA74562458254405224A45E22188BA430C2901A351841E4318AC44245E141880120244467A2857115788AC42423631842D4
-:80C8000044450A29D432A212193B822948D2181498828381B982D4A2AA8162806D5828EF1B04564481C24148275227821E48CD119A12542366A34145C9292F64B168D812C4422449E184A12941CB482F246131CF2AE53932911E84C3E218F28A412F4462548381E8A3946933D3A2E241622947298631298F489114439892CE382B816A7976
-:80C880009622688D7AF8A761102251141AD21421418212C248A0484018321430114C01541348448202302414848554A252298142225124104614F491442CD88112C8482C08A11246160441284B434C12F4CBA9400118306C1210512812290189092561822324081B42184302224651A460828025A14280A42825D241022849A8218113E16A
-:80C9000022E188122A8118140823343425248861886082DD81247226D42452241612917E46F8522122248B82F012C18CB112CC1E148364884158868858842A5468441F81788294842D142E98AD264413A4814F81329D8F23C4C443D326C884113E81A2872586E24498641E8C29C8482C32244E24A62CF8512B90314444444344A3241334B7
-:80C98000292B2100E03814E98A3154298824041E24818295B444526885B48891C4414486EA8214324217429084441A8682393486B288A2388149C8442AF4429243C14482233384874AF093B32442282E12242E1A128D148522452231AA8939121827248414812E894C81242822441822129112922B6132414B281423B91CD281E3A73884E3
-:80CA000087412587D8923211A09421A34844EC224828426486608A5FBB48211448D448628118188D434F1482921424844D421D228741211B242D58308426C4182D4588CC119286168161C88521512C4722894496814341848884112804244F283421482841101826218411B841073692488932121002254428551C29214328051E4885048C
-:80CA8000C1218B852221803399163842C4396212240085A4244485628450844E2116044641C8146E8441101806800844413F99020014244440844102001012040013080011846C04002A082081A828121B92211628024C23024844921018883112A22C22C13289C48484E28F540D4E325014C9438801974546341284701298424331168C9D
-:80CB0000746CE1115C2886648C8C73486424267C13584A191ED8838261218686E25812D2819134478443AA242E4185243491814E886D494B4129B224D8620265229844C14DE8BF5D0C008722D026014D12702A81C6131250842714842901A141303414114C08C01212496148262868821694524C9286842112C1124A41240429210812819E
-:80CB80009018328B148218243B3E2081051914124911C1518058811418285021888502002410B148C8148811CB24203422A0180016284216914AD16822258C5842182722682DC2491182061A48E824FA5EDB00C012608650268421890158821484180020C49116C881840088468801701238141C4124D46148324889081218909282302863
-:80CC000029281194282AA8214B81288149043F960C2944024024010010022186622110662813E481440812122110C211C0161981024A1162422901490885042240012288132404202814184684084F660724118001C4844508444AC1844A11221884018C012110024C088824004C68593480028C0212B0120A42818800A021833812411254
-:80CC80008252820044DFFB071B18874150831C015022422608A44314118128440B141C7831C884854238121481842481218185121143460A352CA2284361881688B8137844682840C888230420B81448C4C1FFF70548226024205584484C81119412871141C0122CC94414230210022042823882111E84B0823224834808384132441220F1
-:80CD0000120284888110140221901242A812FFF2481104490700422A01204424C8128E48994421C1845042449914C14134C444151492411004428A051C1809131841681413C4412410420122C9F22488A9C8288481F0139D50611542C81418004048648100C0124484263814C1874129D4840188C9E4218874143218816812800192192211
-:80CD8000021884132821E681021211C0281048C42400128CE2554D02C04484464104590182D0124894A214178441808401112334414E1813E88498118CE4142864C8944446548425A148303284C2481485028F44018C72880148424221C1222141AFA7044F24B58824711167458546C3324E114F49E12181F151C32CE898F2525B57554719
-:80CE0000A48535141D158B41DCC4111F18D4344CBC4564784CF711411E766542F8814486B484D811D341F136329F32E381A14193F4836244F086A24E181DC22E164F24A8144BC22B528F8AE241F4CC852E4A9F4902312F111282951246784458C4212843F4114249F117112F25918D29B1A2B151F8684B8F81E812B198994B467A897818DA
-:80CE8000F398921A711F78483AA2BE2C1E21CF247911F23911A2E7A21D8C6D8C8157988E298B879D88B348EC39F88221AD282D286B292FA4F2C42C6182228E24BDE33416D561D16C734AF821494F115148B7158F4154A88B48AF98788A249889448D828D816D5A297186528553449A8E726B1425794FE834F88694CF9498184F6431324B11
-:80CF00006425F61A8AE881921BEC8F46E122C5192B1E3EDA8B14B1878149B4A8F428CE96F418824CF92C988CB154D8380D9014844981022824844008844400844440044604444014410410060000002501220012A041141A0400122800122011F85525A0443E383A12712CFC7858F061614AF4B4B44B9D5AF578DCCFC1D146D944B5C6FD0C
-:80CF8000A121DE981F13F392923E3C8F98F8474F7F74F4EA7A8D481E589E418FB9BD9EB119E368FA1A19643F59F911894F61F38BE98E82AFA9F25A485F48F829288F82D8ACFAC2A23F5AF85B589F25FB7E16AF29F93A3E2B931AA41B4B6ECAACAF8FF249B246E487D724F1332BCFC7F57C5C4E423F17F756544FCBAB9D3F9DF5FAFEEFC909
-:80D00000F1C6F66F4CFDC4D7BF77F7D3D99FB3F79B9DAF93F3D8991FB4F54B4AAFB6FE184E2FB1F58A4F8FE9FDD5C58F77FFBAA6EF83F3B5BD1F7FFBF6E6FF4BF3A8EACFEAF89EAABF17FEFDE48F8CFC5ACABFF8FADAAABFB8FADA498F2D786EFEEAE2EFEFB7D6BF64FEB4926F4FBEE8BEE27A5142B241F435658F43F31914FD2CDFC1B15F
-:80D0800031F35153FF44F57CF48F65F95B12AF85FF545639D855F5C7DD3F9BF3DF9FFF9BBBDEFDBFBC8F98F9C1D3BD41DFB2FA1E585F41F1D843AFB9BDDAF15C536F6BFB3A3C3E3C1F73F325E71E1AAF8BF39933BFF9F27E6CDFCAFF29383F3AFBEABCEEBAAB38BFA5F55BDAAFAEFE8282AFE3A1B74F46E74BB1E6FFC4DC4FCEF539CD24BD
-:80D100004F65F52D75CFE1F13F2FFF55F75D549F27F75355FFC4F56CFC8F85F9C91BEF8DFFD556BF2FFDC7D7FFDDFD7D7FFFDDFDBDFFEFCCFDBDBDCFDCF9CDCFFFF4F46F6EEFC1F41D1FEFFDF59DDFDFFDFD5ED6EF6BFA3E3C5F5BFBF1F77F5BFF991AAFAFF2BC26DFF9FB7DE5DF5FFFD8D13F31FDFBBBAFAFFBDAD2BFBDF5DBDAEFEFFF5B
-:80D18000FCFEAFEDB2F2FE7EFE2F4BF9F6FCCFEFFFECCC9F570518501250168C140445A14824481448248A44A648309130814282004211426928342481002E81702201983024C08384262208402348240850488228F01C96F08241130112C1165C184821008210D11A08148081140200142502002487182470241A91148A424254248A2233
-:80D20000422442888842229182222D22F04834A221224E8414FF7B0C2CF411248D121F41F248121F41724AD241F24A121D24AB941B28AB9453B84A3924AF1439242F14F924482D914F82C4914FA2C4854FA264114FA264194FA2E459D2A2EC4DC24A1F49C2421F49D228F89124A3F69124AB841F48B24AD141B24A9921AB9453B84A3934BB
-:80D28000AB9443BA427BA498924F8284F9244AAF5D0F4FA2B411D624F111488F247111744A7211E426F1112C2F44F99128AB345789A334342F147921D84A6B82ADB52783ADA54F22D51879A1DA58EA227588C5581E212DD9CE252FA271915CA41D642CF9916C27121E6CAD911FC912EA41D25AF811282DA55D28A9F13448297924B842730E
-:80D3000034B842F11648ADA44F22F519FF4008488002002008440018000014000029018800004001400800480000001200000000441002EB26304241165494432484511A1C260C40512290881B182B148F12184A2841B448183121901C2184886424872848441022584285611122B584911A848632448225688867814783456AC220467CD6
-:80D38000370A41272B2428805141421825D821E22402C81B811D121068452C948160113044413B3427147054D26164884936341514F1A411D01631812F2318D41C45E2148AB243518312214E1423048E42E2C84089F6AFCB244CC4242D164D49445218AD413246D8248272220316C18B13B842F11CA246788A2361411A38415C7231D2A13C
-:80D400000D81595CC122CB28A95441DE25214D134C78123112875435A42C6F8142F1228127458225EC8418F8448884AF28062A7418F442F8402201284250146034821448A0482928814168140040C14844244241D024052D824694121504402248E18852141A52281341E2811408211A542243C1324B4A4410A842AFAC0A4800A0122881D1
-:80D480003048208284081843216481181187142214514A420860442508414449012D8200123011141351248C541880688889311424A2888228418148EF9A4A322425361150831CF4214447961E22114AC812148E428638635B121D44514CCF2485F49864834264641CD34144D83481934881882E442E541CB12151841EA647A48F41B62A41
-:80D50000A44A269582294C43D1232888B4486184322FC4A8A14A1AF4BA738054421C0189029994282820AC4114C88C581613375D16C1D528221742C44249B412126444599112408881324627112E11456848BF4461442F84C3421966388AC481882F2821012B128CA81889B424890AFF2F4D62421042C2114E214372413458252142820899
-:80D58000292117044128CD4145E885C821264418C14181A1224D484486C444B8001232241E2911A6141C0A509285318442838C2492A6608446F4799FC04E45014B12800121161434524E24824A91212932822591148B21C41A3218A3819884A37168142261418461841A522810110243184412411422D826448581818838E86243A8828024
-:80D60000E2C5038C81C41411125144812840431C322240449844821042141447C2B82410144848048611D4488811C8E1411C04A1848364181941A4949088231101822A6141D022F4C686241302400884422846088880C184811848122180C8C814422242130418302368800210247814A224A18266A458188D122E488220044251412400CB
-:80D680008741842F950327574521B115024D184984A21290838726F08214241E2489784683688284894E954428ED628D51CC2661215D2885028CA2214C48D4214836242F543884E3C6494B14212D2823D842AD4187211A2C28CA82824C7118C46ABF740924104488114142384C444E12808954183042124C21D14238148951818800254283
-:80D700004428B124448448442211B8912244089092848D911B49421120084187442AC434A200678914422D2DA554241410C114CC02821889F184418931118449814291859B121428106C419124874181856488A344024484188B411362128C42C83184C04C8541A112412C02424A882A02DE1A8002482281301813041C581817882984732A
-:80D7800026928449083163941288184642EA1162841664111C662140011011D8410115544200429032C08288182098824931A2184145C848BFCD090000621224484E144302A314117AC402121CA3414004826012821482A111C054A384322A1C84018C32148111511448422618E2414848C218C1C04C40D884C124FF26051281641611C630
-:80D800002429C428318821442A880218610026084D91282D1840A2424224245150245034841416521411F04228104294812584012B844148428AC482802408EF1E0B436C2400160239D114B122541219289822412B61704218F4882419B2220148BC0254442441182C48023C440423C122423024104114242331844582044488402214088D
-:80D8800048CF694D512322684846914500101CCA35A0A4802802E04441485482C01818845410440800224443D44114041934468574221838886418A11C912A206142122E144AA83845F875D60010911684124A220200001219984C88841082144824849442100828224044040048000022800246148824A818244C8235228400F08AE524F2
-:80D90000160181224943C8228114A120D45808858112B149D21815F82148221F48C3118E214001153448145242859481431481D28145688C448213D229647416081A444AD882C158A216CC282E14004F8A098415944113042284C0182249448495210012100490422D48803128A8488C0163124801400889240210084604604248190280F7
-:80D980000421C084108232C7244E56875A45BD74E594D2627232E971F14E1425C38833E988768A7535F91112675E1E114F55D8227429F3354826EB15561816D154758553352B1117188D1A643D421F723241157514F223454C3529875613E2125435DD112CD24AD8817891791AA2416526E16267C11E4C478846FAD57E7021518421443772
-:80DA00004349B141F46C682AF488AC148DF81F56A814CE14C3A481DD6E1D38C5A8548AA8E58558221DC4224E4483F14C292A324448C7C48465F244181F82E1813219499623D042E246E2AEE2827114F2C65585E2427B48AACF4D84E3BCA49A8C8BA348FFB64531123F24D229D233925C17878D32311FB13225F36C34AB115F21DC2AFEA27E
-:80DA8000848D18228F22F461356FC9D258F38D141F22F121E8EF82F34B288D182D1C1F62D4EEF11244EF848832865C24D158B24C51B4C6DF84F48C2FD7848F81B4123C5ACE5887212BD4846F48D188F3E2721E88AB54EAC214CF42F27E7800002140010000000000002400002100001002000000000020110400444004000000F05EFF2435
-:80DB00006F66F5252D95FE1315CF65F743537F66F12626AF645762BF2CF4236AA7E7B7F4BD8ABFF5F573741F12E68FDCA4F45C1A9D89DFDBD88AF6CBC8CFC4D589D1A8D5E6F14A699F18F84846255EAA7F78F843427FD1F1191AFD17BB62FF5AFE6D6D5FFBFB3F3EAFAAFB1F198B54AFA8D8EEB14ABDBEBBFE5B2EAF84F87D2A2AABF73AE1
-:80DB8000FA5E66FF9F4AF267565FF656AB3D11CF74F73236EFE7F53F67EF65F5A7A7BF7CFC2333AFA5FF1B1BBFADF56F6FBF47DF19F5D8D86FB6F65C5DFF9EFDFD9D9F94F6EBCADFD3F849588D5E6FF1F17C6FEB9BBFF5D5E2F4484F2FE8F841462F457419FE1A16BB67FFDEFE454D4FF9F95E5EBFBCF97B5DAB56AFAAFB8E1E8FACFEBA25
-:80DC0000B2ABFFEFAEF7FAFCCF83F2B8FEEFC3A7AB6F64F798E6344F45F525658FE2F2191DDFC5F5253B7FC67122FA467C1FC6FECBC49FA2F65BAA3F5CF198987F79F9FFFC1F92E68FFC6C4E6FD652D3DFDBF2287A3F8CFC64EC5FC3F3145AEFE5F55A6B9FBDFC584BAFE4F46A6A3FBCFC47467F51F53D1EFFD2F129288F58F86D6B3FBE38
-:80DC8000FE6F62BBFF9FD9F9889AAF29FE1E16EF41F99C98EF8FFF5C462F25F87FBA6BF66BE64F47FEECF6CF8D45F34757BF32F62F2FBF93F34D5F7FF3F36F7EAF33F65E5CDFFEFECBC3BF32F35BDBBD9FBFFDFD6F7FBFC6DF95F5F9F8EFF7F57675DFDEFFFDBC9F36F6E3C2D7925B55DFF1F5575FEFB7B6FEFC5E4B6D4EFFE6F6E6E63F45
-:80DD000064F4125497E2AF43F37D6C8FDCFC684BAFBEFE6A4A3F1FFBF9DBAF2EFFDAFA7F69F1BE8EC7E1EFE7F7EE5E2F6DFDBE9A6FC9D98EF2FCE6CF6EAE8DE0120123022B128C1404228E48148E4834008A0484281B414A020028C024184220941442232214022250244826827424A24926A349204986048022B148226144823F21052390
-:80DD80005841404423F148121D241450324092412938242714116400228D8148422190413022442100444150244422114004100246120143E8243294814994828228F07C26C0421F4152281F41324A1F41324A1F41B64AD141B24AB911B24A9945AB9443F24A9343F34293478A2D914F83E414F9254A1CF8274A56F1264A96F1214A9E2512
-:80DE00002D4A9E24ACFC91243CF4912485F391248F14F19124A3F48124EF14D141B24A9921AB9453F84A9443F24A9443BA42F9244829F9A448984FA2F4A6B8C0421FC146F2116CE3A421A5F11124EB141D24AF44F911242B925F81F242944783AF3438B48F3479A4D85AB932D452F9A51A89F127C28B81272287591D588F41D232FC182544
-:80DE8000ACECC9C2C98E64AD139E6C8F14F1112C2B848E2C6F14D9C1F24A941D282F44DB81B24A7134F84A84478229712498926F82941A4FA2F551CB40084828000000400428000000001280010000001400848004800800002421280000000025016FF309123C532816B244F249122826C2114A62144A0214E364A21A1811F38619811873
-:80DF0000CA8164A268181B14441C25012E148C222161138C8848285128138AC424421133388C4A9124442638442D1816B8C8C228707E054E21862411044419311D460883512A8C3992C011812B12436622184C0483AA84302C4CB2B14484E428820486352488D06331C41D2C2B2190982954821A0633D1C2784248B84688882218C4914FBA
-:80DF800082F4A19930411A022D424364B41AD2C153834A92452F82741A32112FC4722822C83319F42287856245121EE8ACAC1C49E112E54984212462448D218759363431859241278417412CA2828B494F24924C4663221676C49228C18B428A343216E2C2FC88313E482FDD0F2A5141A96141221644014A018901888230118D12C024166A
-:80E0000088014A0828228912C4215924C1821A020082889694848C921A1124001AC281178889914424434844988800416F8F0545022C21414248A22180B22A210884815142536134124A220124A04289821108281842C0244004009245B181542C1E28255281144834C02482A18A84119428827FAE422144712258281D1C4E111915B8129D
-:80E0800064991B48186025C601C0A8848D4443C82C848D81004E14C43994252F68F424881867224AB144022634262F6192481E48841B61432888C8828F38B1189848867811285B488D84A081F092E740042C018C11C111A311F281383B1812B018141A011A2234422810D83808684CC41683C4214D4243082546444444D44292242B1490F4
-:80E10000496C63611041E3A198888447828991988E4885041A08FFA90442253328872155E2848184A241B0488208C0C14142D35881C391C44D3800008313484134A22E181A84A261682002293188C715821784A668288388C8411991428813382241984189C2828F6742C319101128440844D36442816715008C9284193844142E122816AA
-:80E18000193412830283F112824604251498184AA241A39424B011524824AC18448A014613240622234A34814E824216A242E0F604841E4240628229011423612412C42B81211A12180628811E41A2482DC244185CA28487284132431164781185046C98445A2201404424392843A89218984129944228400228479400442C214114941DF4
-:80E200008302808202001490185246142C5418C3024210048C01488A1488B28101800844414E22E621528200418120011C018810041FA7429111181721A4CCD282618184874547223632782D1200190883A5144F2483B26149C4EE268CC4214D52872444636345478966FA31421615045B814C35146788272645B814321A4E28806881B85B
-:80E280002A11B2822412226144F03DED10421422214454141D242581141881088951842D85411C42F848158487140070181462488C0184424908C8284D8228830240E43608881129B81404D0429844188AA484802232AC241CC448806412291211B142A2844442124081E818453141521440081425428114083D42418311B4450911881F77
-:80E3000044B21498AC30282F32118106312082C98444442998844082F8EB566022184D421028A121181021C114284A81056302419012004616044352C14CB118422439241160848B842C06244094152006801C4211140889684446028F4844F64F2100450147152952148C119C1949A22C14408D08008081185848104808195218488E5848
-:80E38000128428481048882104848A84C4488433521831420026088912164892287E644008310083840610184894C8605245992888294905411194702421014C04284628C8488352C1441912982913914318CC4296318210BC82012961281A0412122901BF6108E2211214602250122A250C2A2C0430821514827E42E214321138481D22FA
-:80E40000181D24401148348482102131218111811110415812C119117C41C2822A3882211E22D8CA420488FF1C011311092118408101184289B114A814424725881244C0168C3442A01841428C83E251048015A8180086A44182A39A3861C0128A5468801121411404008018F41E3224C40038473418498402431209800A0011C084814148
-:80E48000107642242231C4001642081A048800498801418C621882122882444381840486845282886904BF5A081240011200A4148416815841941893449886211189021742190115082012D518024128402148011412660216041488421004AC22021524224181F2692A1484124824C041241048214845A82883981252121C232818914245
-:80E500008083A48492122882484E2112221E489044284A827412A1842B84C9022584E184622441122CA52480811802CFE74EE315F19E41167246D353D21F16D21C93715F1ED348BAC153544CB519B149B911B886D142F451169D1A518CB451D481B23114A1898D1C49C2C14F4CA82543719441417124E95165988E3B76E4337219724AD9F8
-:80E5800098B2221854A21F3CE32438C2E3B11CB26CFDD4348968188F42F8AC49B021C21211123628D2C17713528A8578D1A1415AE919A84C2FE8E4AC055B8B8A681B9CF465178147622D2C2B2757521AF449511FA4B118F5A48C8F12B641EA4DD48D768834CB4BD16B81D9F2CCCC4B2C4DA26B12283F98D91CC4444CD16CE342AADC2D270B
-:80E600008C94128DC569F2734AD06254814591714E125A61378476C1C48CD518F8886897844F327814F12E251F31E814D31694E68D148952742DC1C5D154F548785F1262C3EF4B528289E584E18295118A98A14B229F26B229D4B295132FD2FD21541F25FC89138F24F441146B8163EB81C8422762822B824379546228CF2541C12421CCE0
-:80E680000244406432C4140000402242240222200A21000010040041100488100424000000000084548C84C248F01C4DF074545FD3F1191CEFE3F357A41F25F711384FD4F44E5C9F86BAE1FA21A19F5D28F8CD941F3BF3D1D2AF99F352737F7EF6EBDACFC9ABB97F6AFC4564DFC2B355F55C5C5FC4F5242DBEED4FC8F8A4E83E78AEE1BE33
-:80E70000B1948FDAF2282D8F17FAF8F1AF85F18F8D9B3AAF5EFA4C49DED3AFCDF9848329F2C4E48FABFE64666FCAFBECACAFEEAAA64F82F2EEE8BFC643B273E5B456EBFFF3B272F85736EFC1F15C4FEF45F4E9E19FDCF8F1E19F9FFE95C58B8DBF8EFEF3E2AFA2F147255F66F6EFDCEFDEFCD5B15F6CFF41665F56FE65749FD4FC4554CF1B
-:80E78000F6F6B4E7DFD4FDE4F48F97E59AEF17E714F4A9A9CFD3F368238F3EFF4B4FCFE9FDEDDC6F5EF8D8DDCEC3BF9FFF8CCF3F15F7D4F66F6BFF64626FC6F7CC8E6F4DF12EFC4F8EFFEC78DF8647E125F713515F2353623B261F26F765766F56F46A585F47FF78BC9F8AFBD9B985F8CD943F2BF9FBFA6F2DF5F6527F6FFDC7EC7F51F1D2
-:80E800003818DFEAFD4764FDACDFC5F77C7C57C33E2CEFDBFFAEADCFCBFAD8DC9ECD1F1BCB418FDAFAA82DFE8D2F5FB9D6F99FB5BBBACF7FFB73752F1BBBD8FB9E954F69F986B2EF83FF7446AF6BFBFCB46BE82B81CB454FEAFF1154347F65D72AF4373235774DFD7B3BAF14F75973BB55DF56FE59991BEF9F9DFE1D5D9F1DF9CFF8BFAD14
-:80E88000FD47537F77F5D7F67FCDFF4C4D1F97F1C5EFDFE4F66D6CDFC5F5FD2D5F47F75D7E7F7BFFEAFD4F4FFFD9DC9ED54F5FDF54F4ACAD4F5BF9F99DAF5FFBDFEFCF69FFEDFE6F7EF8FAD9AFBAFADB71EF78FCF7D56F4DFFBEFCCFC7F6FEF6DF6DF99EDC4F41B99CF9C4AE9764C0115012A0128C6432160884149260812484248A041A7F
-:80E90000240483048744006044112888A0820080482882F42482A0828226C248248A44A2484C628120810244825DD78025410234121819048AA48684148E484E819088114632842938150030224226082446140449249484302482C1822324E12468412088014C21C382484CAA4825248219F4F477D034F41124E5F21124C3F41124E724F4
-:80E980001D24EF14D1C1F24A9119B64A9945AF64B924F44A9143F2429147822D914F82E414F9244A1CF8264A16F1274A87194FA2645DACE449D2A4F4D1244D421F4952281F49324E1F49724AF38164AF14D1C1B64A9921AF149945AF143924AB9443B24AF92448AD944F8A94984FA2F4D36690461FC1542E1F41344C1F41724ED241B246CA
-:80EA0000F11124E9D94192BA51ADB613B14828F1428355989869D412F9851A183F820C7FA23D984FA27598E1B27188D5A4E588F2241B9A543C1E64EF14A1282D11CCD218C92CAF54C924ADB145F84AB143B24A3924A96982AD94678289F126187E910082480000000044212818000000008001880000400140084800000000008A020000BE
-:80EA8000120014F0523F40013018108132288B42CE3A1CC2411CC44988001B1820781194188AC22824008112117044880254121230114CF111221FA4E849764802C0211158442823A64143820A8082F2DC49143095B426413142181A9812A018281E88412D426485D122E481FC4811E8424148144153014D828977150249A1C12B284992A5
-:80EB00008218641D48236C413012815AA8844E8A20C95418224A482288621D41CF690D118615B8180619A4218D128CF14892B84661C3CD434A5824911F248181ED33C858436285153284161428B94992118D4443C213471A1A6281124D51AD561F22B54DF842A2243014228F128CB484B144B3222537848A6228223E4143F3F181001234E4
-:80EB80001134008A22864281E21408244022B8485881460488220014409412442112C85024820014821816B44841A8841B48241200004A02218048F2A3A1800165A12124110023C2282B848C1402B011446181290A8DA451461124A4428100189042508282C8282116C481001F882252811001A0845022860800A024222BD8C0212D1128C6
-:80EC000010CB624AF142218F41F414C194329CDC32F18154248F2158411B412DB31C64842294AF78427144525899F445824D4986F4241848414352144C98292FE2F5441BE021E4916C214A887C522A84E14488A8148F4A94D88E68528185F4D6B680C31169A212941384954189F285228B842A7148417341A414AC591C2F122D72280466E8
-:80EC8000513C4F949A2246564193C4112594828446C884CA4211C22C1568C180B24301294C8104C2002D18429A94C8E08214B49C01150211242426422272526485148C948223A18111252141C2912F14784C01001C1448088E448D414C6463004126C4841721CE363C04936D8A99014A781A8284C1C6828A94AC812852C02867A9804264AE
-:80ED0000248126046C14482807448A51A28B418718848C91152260424123014C1284185848A9A814434254842823D448A28144C840E24102A3D818129442188B848002842E444226C4882EDA104821C41148A9011242A0284094842CA2422143041002893112228394482C8808418502468171886446501442848818821A840169F288113D
-:80ED800083048038188823C8A480F28CE8244826921824830189021121128B61310080088608924A4881880420028004828480240100418430414C682442820018C84AB18424038001AF650B22471212257944D8826142A9C149329AC2483728CC9852278A8368C1922829A1864D19824287428C04A348D2848C24324843614444C91204F5
-:80EE000047888416E2583544872D8312B24AC8188CA9844AB88C7428624C884392A8BF940C2904A1122B1230484082041A820181191482545880180480824424024508AC614841E022A82130914384840822922119843811424820832189B22484017FC5074024111215032332211602982011011B211514D4811111011111112419189199
-:80EE800011804424E238C421C41486424181026014960287528114201182048001F0A3682462461268848906390448415041891DC84880043944B412481844A418128824824C9421418541084311011054488031142522D428084443182418644A8A8118A41C81BF374C01001041341824848042024B1423823888E0480100848410186A5B
-:80EF000081818C088C0330421400212558288C12388A42911608844886421218120812002EA6B01122024C02290214448942A88241851154149018004161112CD884011928281224128408818C049944018094A34221C0854A4181813124800143018442FF580F8A04124C3142136112002C418201141054A14C48D8A2881A154121880840
-:80EF800000C04842614792822B4A412833D894221188128A62822C5414402502E044A24220226221FFB84A42281211216262811C8362424008205482001352141C818411C4118B411D8294301119088C0111809454845012601822932144A1C12188211841212122432448F8C838104472241888410860312048C111281908121480011287
-:80F00000648424141800224C01A2182218AA41480443C255581641022742004004288021014E144CF61F6FC011162102A941A8411285149218250A214D18819098238C482401126190224AE1114248B828014D524C211881B32824024C71428812388100160760C212244223028742F0AFC2401C92452800288142812226D4819824908262
-:80F08000272CC01A00F02288882A11C28810084240014008490442866218414E81121AE244419822182C018498444410025C4763671B2BAD2D2E246F1554672D5A1F23F2287923018F1992CF93F1414EAD811F34EE19F1225517898AB917D14D1981D2A87112B983C1898F497118D168F19C2C5F43E1C5E215EC51E212D19354DA1B282FCC
-:80F1000083F151241F2ED3B121D69853BA85F18641B0A223B284A44D8A038B384B422FA9015997445B115B4185F83828521C7145F62826A3426A9846F22C81C42D1835E6ADD81651468501C73945B2815428488B22111F84B474068D2823B8277341F8182C8F28386465D531D4327C1E98289957231A7C126C412F42311C47412743A372C4
-:80F1800036C4547E88467ACA0825412252AA1F2243F1292184D084C1BA3B921E124D1D18433898CD88D18D8617134CC42BCCF8838D271119F21889337164E94A4288C8421DC3824358254C922187A1CF44FAA8181CBC52F4928BDAFC45345119F9148264A5EA249B1430344D4483E1E708901280011800164822010012204222422202320B
-:80F2000020022A01182849012A014B12B0240143022A094184432228A24800281228484C829428C0248B3FF0444657415D265F73F26D6F7F73F24B632F22F26B794FC2F28A9A3D833F31586EAF2CFD3D37EFCDF71211DAFC26251F3AFB64415F1AF92E2F3F38FAE84B2723AF96AEA98F1AEA4B5A646F49FA444E777175B4D458292D66FF4C
-:80F28000ECFC97246AE246F28616DD277F1829F151568B545B9936F21A12CD16EFC8F96C8EAD988F86E448792CBAD941F354467F45F52D27EF73F34E6E7F73F27B632F22F36F73CB226F69D93BF1FBFFAF64F4D2FE7F73FBD6F4BE333FCFEFEBF293946B565F8AE9E2DB43FA68C91723BF95F6B1988E8D9F49F81D2F6FC9FA546B6FB3D3AD
-:80F3000046FAB4E19FF1D252F2CDEBFFE9F27A28DFFEFA873EDD37BFD8EB1BFA797F2F14F597932F2AF9AA944F42F3A8DCEF86F82A9AAF87B5A8F93E129FED045F24F415429FE3F233237F77F67F73BFB6F661629F97F7667CAFE8D913F85AEA4F64F5C8D2CF64F6FB592F35F5FAF9EFD6F681912F14F495B5CD3F3F3AE814FC12392F96B0
-:80F38000E681F238294FDB5BF4EBBB4FE4F6B3AB5F49FAB4F495F2A6AEFF6CFCBEB49FD6FA6224FF38F1BCA29FC9FBA8B89DBA8BDD5B98BEA6AF49F9BCB66F4EF9E4A66F4CFDA2A49E94CFEAFBF2B9347F75F71756BFB3F33233EFE7B77FF77B7B1F37F77D7BEF87F59A9EBD32FFADFF51579FEFFD4FE7BF1FFD58573F7DFD5A4E3F4BABCF
-:80F40000559F89DBE8FA2B8E8F94F4193BBF95F7B1984FDBFBBD95CFF3F7BEBC5FE5F7B6B76F49FFB4B5DFF3F3A6AF5F5EFEB5B7FF77FFDFA7FFAFF3AFB2BBBCAF3BFB1FBB2F1DFD87972F4BFBB8B44F6BFBE4D46BAF6BFF2F4AFAB8B6CF6AFFFF9D6012302484434268328414842662881400968862898504288022982811282128888374
-:80F480000400426908004542E82268814D8248141E4820412241264126210444F07995B0841401114602423042282110984123145452482F140229180400210000145048004044628810011904C4983042D0420888A094802888C141DD97C0421F4152281F4132481F41324A1D24EF24D1C1B24AB991B24A19F54A9443FA4A9343F24293DE
-:80F500005783AD955F82C4915FAAC4854FA264115FA2641D2FA26459ACE449C2CA1F49D234F4912485F3912487141F49324A1F48B24AF9812CAB9419F24A9159F44A914B43AB9443B242F9244829F9244889F9244ACF6A0D8CD54196181D648B141D24AB141F41F246121FC9F248141F49B24A3A95AF6433A4AF3439244E9357838F44B8D3
-:80F58000B7941A5FAAE544F924CA8F15F8255A83DDA265112EDBD6F522DA96ECB2A5418F322D7968F11144AB941B282B9617C8AF4601ADB14D68AF14B914B44A5A84A98B94BA6994BAAC75FE0D000000000018448042012008000080018800004001200200000000008002000000100ACFCD0D2415321832819134834404236C88918E44C7
-:80F60000872881218D1411AC1221028D82C04436081484612784812662221227221928312C82197821B44428115A124A3852990C428C042618982C006F670311824451114606B02871424188811882058C4122C881881D4C30444C5828D086C18242178996622389641548181841136812AF4522382A8F18042C13112821941A1642281C50
-:80F68000048501DF9D0515622416981150852593488D2435228C68DA4CF44882A412182D818827381786E0C1DC42D8A4E5829194107287F8429825CA69AF12B11224E6114834A4118DA44DA3C3EE351894232F3224E48801A395489048E48D248412BE360011414C5218480018488116482288018145081782100400002568188C24011AC2
-:80F7000002422412211285A1282F140140182881688146810412A1A200009D9640024180014A810680A14142401185088774158802540041830128150224122964412A88120621100223C46821124AC8482145988200801804D08F4792656C126122153661A50547114B81256118172846BA9C24C154BA041664855A32588334A623443468
-:80F780002487614925B3822142C242437112C4B854172483E869D481DD181AB498E42294194C3148E042B182D44834284E18D88B484CF49E95904210034043041D1486061488AC9485414B85E84417C11A048C44CA824810C41839052C2141C2442B1A12446430822385AC868F42C4882AF14211418304259482C944A8411A8818F412D552
-:80F80000D061322441286D134AF248114A02181CA1851724E08431118071480326A8345C81942441CC21322445E2228168224212644722AE18111914C8842D1935082B14488C68A5108C2B04228C38448C24F4CEECC0481004114D21702118581E8C2454288523741822448854828D156460212E8290422C28448288B11202418B42254425
-:80F88000824124B188731298425821C42C2204AB18009044104C5428CF970489912493146B85A40028A0184429614218481A084921140289F31A81501883C1881E224021445A188444105814204A14C52485A4283CE44412C84864982034184968282E8828860B2712141832000025254103200C103C128C02804984442442A225818CC119
-:80F9000012444C684880098A23281406C08160111812880049A48100221820F4321F241B341C42E5811279250A9722264DB1C1117212D2242C55288B848452A116A518C99389435218521E688F22711892912335186518E426018B8311482B1A2E16D3B16188B4835229588C44CA96432D098524B284318422C74200448D12114A0100243F
-:80F98000161C88145881A0416C21D14882141A042C847822125822420045E248820849484462494144890861168CA1412482428400421AC4848489C24AAF870421002283641228002200C01845482413428481110940681C6420FE422C442122180040C5149012481248002848400148904884A02400EFC44B0114E4411420444944118418
-:80FA000001142121840029084E84CC01821AA28213080041413748C044008840081028D522042112C812852224612148128849E1B50C14490210410428708612889248444C61125024B21B828052148B582285072B482601254A028F444804121130484054424391448183644211182129010012A01483F4F3BCC0480011001002C0821D07
-:80FA8000881818882486912214702201822CC219C081282508148CA48130C1865441241922984325388121111011282402002928844408F021172022521441450289220220921113684846826142128C952C489C220248814C84621C4502608110144201004311A249838181081901118D44842140042100FDA1108281062800A021908172
-:80FB000080418809424144188E18182C11C584000084224200A29443420410480182404D040020B8441208401852826FF50D0050188194118111812002241110722811114281688468112111344542114156248C41012C088691411CA8149411D4214C011880018425D2281188518224DB5EE018B28864122222360215227224D118748297
-:80FB800012C88180311424A81426081906682C024084922884002D4A4A582220120AEC8114420887341CC845A40040228618541844FF5F05A4118C0486141C11628410425421288449421841480249D522388929D142A4844934181994C4D018880494801466184814C146051E411E2442A85A283452201561814223013FFD426232DE289B
-:80FC00002E2431DF9A129141A036257481BC82F212181D86278845B3A1E222E314AA9883F3889D5BC18B882DE19439728373B618F8282341A7232F2CD8415A2414141983F8494C56F687CCCD189D46C81591A3471417238B442B8142878848A5AA241E438F84F13292144286518CC585544A2E23B519DA1DB8428AD911D41CB1586843A799
-:80FC8000C4E17F6B7117C1415B244E1A47A4D7AA1D324681E214483E8125C888CF4171C4E1449C24457626F5C2482718856835274947954D1A5E72849AF188114F21C11AC3A211AF35A1448B119C012F6C0B39322515A122444F9312AA22512E22857339D12868895D1629F314121555882E2A3DB83AF4A8253F1227F46EC44D464BC69D1B
-:80FD0000667F167646FC48464F48C1498D4237181F6811A38895E321D11795181F1484714B7128F8445119A4C4218B442D422F247424A8914D488358649FF3020000844008004022484208400424820010120800100400611006410010044522412201820000200120F4BCEC142CB212F328289F82F429898F8353998CE227F72E289F8C96
-:80FD8000AC32A7185D113F1CF41C1C8F86F4AFAD7F5FFF242D2B994D111F16F96FE55F52BAC454112DC63F23F1A7A31F3A7A42A8CC45F269A555F3A1A44F22F223A3B5F38595D7141D155734B7519F1FAB333BDD5F41F119996F41F1D2D24F43E324F466359AF91C144AF54E46BEAE40B272F728289F82F22DA9DFF3F32A291D238F87D7E1
-:80FE00009DF244452EB22BAA5F18F8D7F1DF93F37959BFF8FACFCD5FF29A93BF98FA658DBF96F5C5CFCFC47C41D174F436133F9EFE8DA337B4DA6539BF9EFE81833F1EEE32F2A7E3BF1CF4CDD59F14F153513F3DF91B19DFDBBB21B2D3FF55549D98EFE5F4DAD84F43E324F474372FA8F9165C5E58CFE4F56BB8141F22B232F728299F8252
-:80FE8000F2282D8FC3F32829817AF728288FC47483F19A394D16BF94F4A5B59F9CFC2F2C6F4FFF868DAF8FFD36195F56F865B44FC2FE2C894F52E662F6D3D22FCAEE3AFA4A49CAEDA4F5612A46F2A1E21F62D212784AFA86963F24F51A1835FA4A43AF6E7A1BF393B15F4DF959D96F65F19292EFC7F312124F43A299EF41F11818CD1EAFE2
-:80FF00006F4651212B512E24DFC2B22CF23D3FAF9252A88F87F729298FF4F4B3B3BF99FB9597FFDFFDA7A3FFDCFC3634EFEFFD37BFBF86ED9FFF74D76AF684EEE7C21F16F625657F3FFFA2E88F6AFA4A49DE545F2DF4E2EE6F2CFCA3E63F22F2C284A78CEFE8F94E5AAFE1F1565AAFE5F5FABEBFA5B193F9D5959F95FD5E1EAFADFD7E3E35
-:80FF80002F21F1747EAF89F85E5C8F85F54C4A2A0D2210445824602210042240214812C126928922B148328128828314E14412B34892868304838408490845012CC848E08194848C048414483448248C1488140881F0BBA1400114115081008511918A101851421781A14508101214F8244240024502002542044448200221C01244246031
+:800880000000000000000000FFFBFBBFBF7F77F7777700008001000000000000000000000000004001000000000000000000000000DF8D07480000000000000000000000000000000000000000000000000000000000BE4E000000000000000000000000000000000000000000000000000000000000FFE40F480080010000000000000066
+:8009000000000000000040010000000000000000000000002F820C0000000000000000000000000000000000000000000000000000000000F04FFE8002004001008004148002800414800200008002800400002148400100800400002148000010F2A6CE000000000000000000000000000000000000000000000000000000000000FFE44F
+:800980000F0000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024001002100140000000028000014882880080088280028009A0F0080840100002001000000000000001200004001000040010000400100000000009F31094818148002800414182810820416012810A2115B
+:800A000040012810A2414001002B11484001280048408188022148008828108204F05C6580840180020000001002000010024001002100140000000028000014882800008088020000EFF80F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000008827
+:800A800028000000280000F0B32B00002002000000100200002400000024120018000000002800000000000088000000FFA60A0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000200100000000000000000000000000F07CBE0000000000000000000000000000120039
+:800B00000000000000000020080000000000004F330B000000000000000000000000001002000000000022000000000000000000F04F4A000000000000002100000000000000000000000000000000220000000000005F2E060000000000000000000000000000000000000000000000000000000000F04FFE0000200200000000000000CE
+:800B8000210000000000000000000000000000002028020000AF950C000000000000000000000000000000004002000000000000880000000000F09CC320010000002400000000800400000000400200220000200100000000008002004200EFDE0D00000000240000000000000000000010024002000000000000000080020000F0A3BEEA
+:800C0000800100000000000000004800000000000000220000200100000088000000004800BF170E00000000A0110000000000000088008001000080010000000000000000002008F0AD1A000000000000000000000082000000000000000000000000000000000000A0430000800200000020040000000000002002800200000082000069
+:800C800000000000000000F0B25B8001382001002088021240022200828081024200200442000000282222800200200482002004200448F0A82C002002120000008001242002000000480000002200008002820000004200008004200442F01C39800118200200202802800400008220810200004A0242000000802202220000008200008A
+:800D0000000000FFA70400000022108224020000200880022800000000000000000000220000000000800228F0293700000010013288000080218201482008000000001280028280022800008002200800000020045E4500000000902220020000800848000000000080012200000000000000000000800200FF150D000000190212C20098
+:800D8000008081220120222802000000000080082820020028200220080000002006DF770F800428000080014A01222002280082211218882816220880010080011200188800242004284200000042227016018004120060222800002A040000221002182120280318001828182448200380022024086214004800481002289F280328007D
+:800E0000001800000000181800000000002200002242000000200A240000002800000000B0520C00A0210080322200588024A112800222001224001818202121A21422122420A112A0212A08C04288484214422004002004F0D53F20020020010012000000000088008028823222000000800100200810020000000080048022726D0620A5
+:800E80000448000000000000008002008008210000009021824210022028820200004002000000F01E712002208101800128800180088232882004A82024020082800182200480011812002200000000800400F0A19C0028000000280022980020010026820A28002200002022288908800A8800002100000028002A04008F2208208184F3
+:800F000002288001184A01208122010000182C01002082888128218802002004680022002800880080048004F084B6000000200800D2000000B2008800000000C882003081200A18202808800200A08400000000683FFA0D1220012800000012800288002800200820020000A21280828284042212800220020000282228228002E03C0480
+:800F800022111122184001002084011280018800222A04288081A4818001001848A04224182800240029020021103242488004F056742021210122002002002A04208804808202002824280018A04280022840222202280024220000280028200214F03CF700221C84011E2100A01200A0212021081A02121022820188290100241400244A
+:80100000A0428001C042800424A0282424240011481002BF5A041AA1121A8185220200202185212102A0112A0A4A81CA822088022901488083A82A1D216A8A86E225A1212AA29228222B222822200820022213A2224A4481F441CB80A22115013A8112012AA21258223280A1881AA822182A2222A2682AA224A023A088008A248328AB4898
+:8010800082808AA1882012C242212121602840B2220248204221F27568209241A0233011A011A0214A88218C21A811CA812808A82921032226128226A1999A682300982442263222225A218884022228004A782212022B64424A04002BA5002601260126012021820400120028122848281A848204290518800198800100212004460200D2
+:801100002400820000142004F06C9DA0233AE313F221211F110A1F11818183A399187A051AA2185AA5A9AA28A29DFAAB335A24A626184AA4884A85E124B482A8B91F16E625BFA20A1AA145BAEA28BE2266242944B22202A0442F22B222F222222B222AA6426A066AF6F722A0333AA7331F13D3112AA211003AA199185A07A0995AA5AAAA09
+:801180000AFABBF2AB777A25A6BC184A8CA844F041632BA8BEB11F16E627B7E22AA2175AA5EF8EE22B624A82062AA222E024F6222225722232221B626E622B62B062F65AD9A0231F13B731031AD211A211121AA2319AA9444AA611189AA155AAABBB229ABDA2A866382AA4A25AB412A1995AAC895E532B912AFA71711F31B3A28EE223B3BB
+:8012000012A1F7AAEB26B262E22216E2229222824E422F22B222F222222B222A22B662066AF67216A0331F13F131311AA1311F12F211111AA1313AA3991AA1551AA1111AA9551AA39B2AA2FB3AA3336AA7423AAA452B199AA9551AE137B732B321F271711F33B3A28EA2337AA5BBAAEB267242F2226227222F229222826E422F2252222FB1
+:801280002232222AA6662B26246AF65C1620022280010000000000200800820000280088200288422A082200A0922002000024C02280820400F0E1F900120022110022128084012088210280220322400200002A0822C011001082020030220080082C028084820422AFB3062AB41122B21122B611324219B26291212B961B682B9413B86D
+:801300004229F24291222F142BF242B13AE414EB2AE414EA2264152F22E419E22264192CA4292CBC91C2521B29241B292B841B6923B481364219B64298212B8413B84228B24228B24228B242A842882E429776A0421AE612A42166A1212F14B11132621B282B921B692BA41B692B84322D811AF442A1B22DB123D312EA28C1B12E821CD8A6
+:8013800022E118E22261183CC1212DD21B29581B6929B88192921B2925B2810219F2428219A2A41B282928B24228B24228B24318B242EA22E4EB0A20080000800200210000000000000000004001008004000000008002000000501214EF760B2840014001402101C6024882002282281262284280220129880188222A01880000008200A0
+:80140000228800242280A428008082F418A520A138803111181E21294802A812240028190811180012008002202641622920120221100220062220420242C021148022866814702D0118CA1101121CA12121008AC2C222002819289281382C2122A34120A81230824A011328A2210042000020062228A2228024021488284E22882601CF97
+:80148000D8072228204101148234122041828408000080040022002022412219829282100221008200002440021C828402004248BBC50080013420822222010000000080034200A0242250222829010080220200002C8804482C080000002800702E0D228002282218121062121818888021024A8B21A4121220042021820128A012200284
+:80150000008A0228622A040000304228482880A8242A84F2476B0080022C022081828102128800001A0C1A04188004482002242880020028200822622C0200002442224228002A8406CF660B2220011428322824108101001222808221A22142002022032721281820012828002800A04842208418020000800A20F277792001000028265B
+:801580008122016820224182820148322100160112D28800280040022082064800428A2222924240222224A2844221006FB7041C024222120010820420A882422800001002281A08602880A21214C2241901A0182981812102290240022A0822004800212242EDBC00001C010000800121001280321128822022A442102302122024012245
+:8016000092220020028008000000420000A880F2DB36902100262101220012184602A0411A8282036892002AA48230126888321242582419813122122383A12142A082802812A24820B22204488248A880F2F6918001200100193222488082280810021C012880024601142C0180222208288848882006221082240224000048284800283E
+:8016800048471210218102002002001200C02212200212208208242846033063A01822A8304224280082190C42808442020040021002F081C9001100281100248A0210221882011221108281042082A812E818822A054001146886011411002440010022211002202404DFC60D808262132001160113A118802181210182221A82A2421832
+:801700004229A284422024028221C2200C9220E822A848224228482842800442806622482220F219EB000000282124121022220228002812409211211922081882184812800200B2001400000010424101200600002CF4D6C88081031828182C02350221204102A02100244280C112100200904228421A42C222D02222942220420223821D
+:80178000220220042200C021282260FE8012818122112121820228280020021812002222221842183238321982044001160114902220A28214C0418084020010028004AF1C05114001001400889898102281081342E218222124088219210288881829010000001041411121140140018004000010F2248E008211002219D21231112A01BF
+:80180000400200002412001022024246024810226421200E20241C02A048258204283022004800001426F2161F8002488008002820820838102102006210021823820800886011C800B0120C31240014002024440122A024226248211CF4873DA0219A33111E31923E312C622124188A6223C0121838A0B11AE112A9142F11A516222B226D
+:8018800025B152A133BAAB132CA24F2B858AC482822D41BAB842A488248A82B2438622A4624A52311480E4246626224AA4622681F25172601217182A22A2221113E212B11121A882B81A232922A112268252223A862231C2885A8E542123A4642A8C21E22428A2443A19421191223D412681888466142A24B46246A2248084026014F0EBF3
+:80190000971411221400241691232F12F232A32B1182242123F121821A4261221A122286EA316228222AA24C4886F2D3112982A53315E1225A212CF321822F34F2218188196C383726311502481128228052222A32422CE426F4E1E414400100146032402201122C2881081C083C0A1C28C1212114400142218A028A028A12A228218A4291
+:801980002208400200200822000042003F4C06281B11A033221B13D021B332E32ABA828BA91B23B89213E11BFAB1B11F1B99323F3AF9A1911F11F5B2423F18F861711F13E311E413F5E1B316A2A9BA2B2FFA41E32BBB173B23FA41C1AA2AFCE1233D812A7243A12217121F28F8C3C1284A26A264C0426AA6442F36F67F5B143AB3F1B7112B
+:801A0000A3733AB131B311F133323B112F28B892A12B9EB223B882B1B1E91B2BA2333F3AFAA3B12BAB1AF5A1533F3AA8EE7AE317E71DFDF1F38E8237121AEF14EF2AFAE3432F25FF11B33F2AFAE1612D822BA61F3EFAE3613F16F663216A56111F38F8E3C12AA2462AE226E422A2242B662AE222F62614B011F331713AA3333AF131113E1D
+:801A8000323F31F332322F2BBB82ABB38AD322B812B181E913A3321E323F1ABB22B332A3DC1F36F5C2E22BC45AB151F5F1D23F3CFCB39326A1A55AFB41411F3EF413F33F315B223F1ED622B862FEE1632F16EE26F263211F16D61152111F14A44462624E626E426AB422A6666E624F6F41F131311F1BF711317AA3331F13F311113F33F372
+:801B000013312F2ABA92A93B9E822F2199121B33BEB11F18EA23D322F3A3911F13A7CD6E423F3EFE61E17AB171F7B1F23F3FFB33132F19AF541B5F1F3EF443E33F31F5B113373A1F14FC23222B6E1F3EFEE3633F36F263211F16764151111F14A4644AA6666E426E624AA6262AE632F66CFA2002222002200182002001112812301130816F
+:801B8000281100421180A824208401218001001440010024481400400200002FCD0C260126019021261221223122800121321C21CB13224A0138484A3222142CA12C989012402244022440024240820448002304802424220442F01452C0411B21141B2146B311726293212F34B111F242931B212F2439112F2429F24293222F3429D21255
+:801C0000AB431CE922C4A12F2264112F22641D2E4296F122C29AF222C21B292EC21B292F22B891F262821B292B841B282F2498212F2498212B84112F2428F242A2222BA4222B842A84E822C4E4C0511B611CB511E23631112F3691216E1313E134B891E224BA91F24292824EB3222F3429CAB12B432D91AAC5B13DC21AFA23429237221248
+:801C80002F326C112F222CF122C11AF42281122F3238116E8219F26282282F3688E234BA816224E0240A4A2AB242B822B4426A22BF8A0A2088040000000010020000000000800800001C080000000000002280020000004001CF540A8AE112611211182D12281902200B2001628048A2824222388880321120242101182C2102290A92210D
+:801D00003A082A0488484848428092424822288004346F160622821228800850221904664262244082818202A242802486344223828982288422A2412B248082A252422C8388CC22200824488A042223842422C2212AF42A9914A03C1361121286222212C241B86222460228200223E2288422238D229412A81A8C8239416022784A324236
+:801D8000288E1248882888C88842C24824684E2242424222244A6212286F4C042A112102241210410200252201482921882288820420246214218001A0211810A22880A2121AC6126880120280048220922248280048EFCA0C14001122602230420048000042320042481800210028181288A0821223022A0126022C882206800600484225
+:801E000020040020E23D0C1A021B922021D21201A08211360200212381880322286880242202182C64262A812101C2282032827682A248822B4228002924C882284890422A248402CFDE08289011A0212CA22121A028113221400223A5922820064A014222282063254E328A038220288281622820BA82A6482924A2241022682422004803
+:801E8000224200CF830C19018A120110012904200400008001A042220021000000122A213162800223C2720022280080048842484602482022627910012800240090123828488004800220B142222224A12423A4292242001800400282482148884082062220840A0022622100AFC90D222240012A812232220010224222128204281002E5
+:801F00002CA24320212C3812A248B042822684260821002C82840220024082020030C28846F25D38800111280080010014808881012921080000000000122848001821180014008842A02421480048424002800456091C0328116021222229024023041E42260278882212626022484823812328A581621842682C248281184201A223C4DA
+:801F80006268248024843862002C22A2844846F2E3E80068142880021224122A81028220410200002848282242482821282034228001290C4602428008800600228004200488F052EF8002168183D2128102382218241800211288187032028022040000A012002424226022001A02620000B022042128422902212828CF2B0F1812280034
+:802000004042028228822088212228028282A23A04822C8184010000292202D0220A42880000232222041002202234224820F4E6D81412008012322211100126012511121262280028128014A224189082A8122D12282C458285044022824102282200002822102284222204DF430E902140012818282830820000182280A812002412580E
+:80208000002A0412230212280080A281A0412128004248800200000010027FE20240611242114091321218322128000038120028284200220000002024A2A420042004200400000000284200F0971F2082A141180021008A0222801202210000804422024222008A8402240000368202268222140228482810220822002200E7E1100148D0
+:80210000806112404201148E1212128A8102008A820420080092C824808C984220189282880020A4280000000042000022703701800662132191111220112201202428282108200122C04238108264210020A32440824402002442808402002A8402004234422F1C431101481100401141718102821A0212382121128A8114022C2382882F
+:80218000642100822F1221A9481A0848A0246E92708282C82248108202282120044830421C52851415F12121181AE52171316321255112E038681A888E1216E2210280A823AAA84A5E422CA24428A0189224A0389632422B6C27244221299622882E128222216280040021C042262224C2214AF42BFEA0325200171229F321212CA2138E47
+:80220000221B11233132271198236822249AA188282381A2842318B212E22294822B688A3132183A42A2C148AAA8886E42CAA3252CC2824A84062342427222A2A4A024A022294481F2652C2081F131211F16820229B13191211F13B922C2B21830422AB192ABBB212CA15138222AA5226E526AA52548122F23C4C22B222C2DA33A2F2AC2FE
+:80228000227E12F032422123B6C2E62212A26642808622E22622A264484AA2462722EF264501000000344001200882000000202804422084080029081890820048244002244880044002800400006FCA09181F12721111D121F82322311B312B111F2BB9922942F292922F2CB682BAA2E229B9B2AB339E12EAAFD82F27B622E626B762E462
+:8023000027B692A9DD9AE926AEB35E722F28F812922AAAA8BEB27AA7772B648ABAA20A2B646632224AA464CABE42A6226AE416E62284A4662D224FB90F19F161611F13B1317311B23333333B233B131F3BB9B2AA222AEA28F9D2522F2BB992E129B8B2AB335AB5F2AFDD2C94427EB22B753EE22BDDEAAEFF1F35C5B25E712DA22DA22CA6A7
+:80238000A8BEB22B155E622B452BC62B8A2CB262E62692224AA444EEC22B646AA6461B666AB462A46626F289D314381D711E2119D321D323B233F131332F21F2B3323BB93ACBB22F29F1D2D22F28B8A2AABB2BABBAA99B2B5FDAE12CADE82EC22F26F672723AA3FFAAEB36BEE2EF25F7A2922F21B982A4A81E322BEE2BEF2B67AEA22BAAAE
+:80240000212B622E222B644A042B8A2B6422666222222B446AE222F48CA5141F12F321711F13F131311F2BF2333337233F33F333333F3BFA33B13ADB22FA82122F2DFDB2B22B89BABBB2A3BBFAAE7FDAE526A2421E222F27F7F272FAEF26A6FE4E532F2EFF53722F22FB22F22F2ABAA2EA23F3C2C22F2FFE52422F26FCC2822F22B24266C5
+:80248000262B444A44F2A2822B646AE626E626A6666AA6226E42DF5E0E14C011400222122622290220412249228902200182102204002818100222302280082A0800008044020028A02400D04505902190212E12D0320114D032888201211022822281A34242002E424229A1282B42B02224652280042430421A9212482304216800004AE0
+:80250000082448A042008F240D1CB411021B21421B21272419F2421119F2429119F24291112F1429F24291222F3429D212A9424E912E424E812E4256E12264192EC296C1429AD222B491C2521B2925B29162241B6927241B28272419B24298612F2498412F2428F24282222B842A94822A84E82274560F1CB511061B21421B21272419F224
+:802580004213284E918AF242318AD212012F142BF24293A21CB1A2D412C1521CABC21E81272216E1226D112EC316D122BC81C2D21B612D821B292E121369241B282F2698212C98212C9A214E82222F2422D222288298422BA426F279920082480000000000288004000000800100000014000000000000008002800400001424D30218009C
+:802600002E111602181542012583220400289A02A024000048002904702282C6421A8403001290220000208484E42802C0A228004826F242C2001B1A002092221AC6121C02242411E028220516A282A04912622904122712884E12488081098820126214221880A4A4298404882440022D4124424001EF4D06181B3C6013182D2218181286
+:802680002603232206C082328021682252125223240C26812854221912622D52124200182232002C28042282422C0AA02829C2424081F2EF860000002092612503145022112022244B2222240822001225228421045A02A08260226014100242688024844402243043100242245FFE0A18001100242002A04124488004009242000022C0FB
+:802700004230228229012A81A2828220018200002282000000218242AA04486F570A19021C2342A2121C8845A2812C831A2349220168181984A818224A02422982015622212282988260212A11B2228123012E828282808428242886A2A4220028F01E7A80012219022A6118212220B182139192200162B04101122800228045E22261214A
+:802780002A81A2A182A2182C229112B2128088282A2824088828282B84008A8482E49A091C021C0124004A41A218222C04422448001888C888A042C042222420240840820286820128006022000080044880222A2402F09578002280A1421448250200428008A84A082C4102232221081022C82280042C212226812201202802291802B0B3
+:80280000620820081120880880F82E9A00803121200200102112621200A0120028290420A1A4121220211181040048190AA014A0242084822402482A04209422902228F0AA16A014902100202382210220085810324248200848A0841420022082820800001221800100000000881C0800424242AF580E5860113260122229222142A142C4
+:802880008280853842281642828A8401481932121A428201228A15822281E2128811A214222282218004006A8888889422824A2226F4D9270068221162A014100200211B2820C2821A240420222488880480025A022022048005208881148224022B84200400200800827E850022601226D112911252214691422012128221C8929229329F
+:80290000822818254202002901A028888E118082A2121812222200800800000080222804F0CF12803411008024044229A281A08420D22388024213A8240019A88211111391211823294102272824248A94822C0821502210022D821002211082180260221F5B0C0000422214200114428027011C2442012681C5812B421480010020AA128D
+:8029800028130219011324341152114AB28122948142A08400000000827F4108140010010000002921288882810800000042202728044221C26014828022A248148A024081048822802482040082F0677D8022848224A2241A448213028A01A0212240028A0420220C2001220020280188281A1A8289A828882002200248000088682100A5
+:802A00008FEE0F42121A04100223061E421A084A982210022901218002182C0B108201002460282224A08120028008008002008002821002BF7A090048200400004880018218221400888621810214141414188622210200420020012100101201860286028824200CD01C05288228426011348096216028281A0C2424221AAC4210220269
+:802A800000212240022129012981B8820128228088820A20080000203221484021F8DE7300221C352100002001528002A01820022028084A21A4844223A4244A2164144AA22452C04150122081C4410020A8688088A4C2484828822D82486F934121621D2AC1412A7211B351E52432626E414AA4411AE824CC821B1A2ABA2203AEC2CAA857
+:802B000014382B85230452382B16225AB82228D712B242B282A18B2BAA288EE22CAA622CEA1A4692418692C12C2C7E8282E828041D426A021423F818A9A0448A2331212CB44247B312E421A5111146F2A26223A139282B111CF852C23B24242AE228A828243F3444F26143284E5282CE7238FE52126EC24AA3113A61121813186224882032
+:802B80000482004A14A2E68224CA6418A8BF810D1922C2214A7241210280D223B292A9984AA1182227211F2864291B38B021E21838311B421BAAD01121F11181122D12122F2888E83A98212543F3C2812B11F6A191AE41882E21822D81A602C8002A022ABA828C8888F4354610810120084800000000144001144814481C02000000000092
+:802C00001110011123161112314211230421100221D0120200F03E26141F14B411621222A0135E523E324AA1A81F1CED24FC42128E928E9233B1C1ACDF1F1431611F28AC641F151FB141E634F143511F35FD13416E624AA4645E722B771F35B2C2E434F8A2833F12B251F6F3F33F3FF923633B4637323F34F442423F16D822F442E227288C
+:802C80002B8CCE622F2CBC42A68248F0C2C2DF6C0E4AB471E712B221E226F271322CE527A7161F1EFF8191242B3518243B331BDF1F17FD411113BE81FCE1611F1FBF13B141F4C1833F34F563D33F13E426A7DD1F15E624FF42C11F3DF2C3415EF32F3AF323611B232F21B372F3A1E11BC42F2AB8827881A1A42F28BCC22CE82CF8E2422F4C
+:802D00002EFC6261EEA22B44A0CC9F630D6AB411E611F1212115F111111F31E123A3571F17F6C1D32F219CF28AED287912A12A1F1BE827E238A8AE3DE11AE91CED14F441C33F15F421633F17A667CAEC1DEB25B372E72DF6E3612E623F2ABAB1E333A1BB2BBF1B622E23EABE82081F3CAAC82B8882CEC22B6EEAEC2EB222BAC2084AFCABDE
+:802D80005FF061411B73141F12F261A11F13F311517E727AF571713F387912B252A55C182F12A31AAAF86361AEE1EA8ADE31E814FD42613F34FC53433F3BB653E427A75DDE217EB21B771F3DA66E2E621F2AB2E1EB32A3463F3FB2A3EE38A8EE3F38F8C341CE828AFC828223A8CCEE422BCECE222BCA2BCC88CAFCFC7E2002002602182026
+:802E0000A248A049241A04122089A2482812288210028002800988800988909280092A08200882200800824200824F38032001286611714202181351220010022DB2482410029826023D424211122C242422F1224242A02121282220020088000048A0484A022882003FDC041CB511C2111B21421B212394612B1419B24299212B94112B89
+:802E80009413F2429113F2429113F242911B424E911F22C4A12E4216E12264192F226C192CA4292CB491C2431B29341B2966B3917642B381764293612F3498612F3498412F2428F24282222F242892A22A84E822F488B3C051681CB11122B4111292212B1419F24292112BB413B84231212939212B9413B24239232B941F2281E922CC811C
+:802F00002B5296D1226C193CE419C2421AC2C39AC6439A62329A44A3684683E63488E6349A614E82224E82224E8222A82B4229A8428FA60220080000004001008002000010021800000040010080040000000000200400100225015F960E901180036E12421641013602808818022CA88480842304001002821A12A2122282822A088601D4
+:802F8000880046A2428200802848A24280260242243F4F0B46A12832A04240212284A38420612160216A016022009213128282810222800858298202AE112C12A1218002004288002822204CC281E018A242AF310430D120234482C4211C24A396212296C28230222C884402381A3C1221821800201221E314B22288AAA48AF22142A01A57
+:803000002022A4248820028800284AC82214C0412D221F14011C84A21220A261141200001800124A01882242001302223022A0821229081800C011821400400280840820CA224880840AA848EA0F226012005022112C0120D1228144012008114220840433021B4228881229810212212814120026020022400124A02422288A84024A0242
+:803080007F334181210180A22122222812180014C2142A94222306808A0200D02281042AA44227214A02221230822B822F2A1161262A143281298C14C24142802484222402228F710F00190220211223028011021C48A12429386220042A84042712242E114A022AA512382386112213512282299A2123A62421139A4213146224424A82BA
+:80310000A242AA842602225EED14321200282C02281829210116621448002810012A0800002C0482242C040022001A886221002100880011004800004A024F1B0518481C218302801201190252141880848309282902C28A22022C4102800423020086220B2AA182000048C220C8A2E82C8484120200EF8701114800003012422180122280
+:8031800002212B82004223110224001A04880022529021482A84014800283944A2820048200400002908281FEA08100100142280A224520048002024028842480042112848184A010048C0120022008082042400008008002200EF5E051111162183422192221C84A261281A440120A2348A012B1A4A82C442A0241A847182822125C4120B
+:8032000030414826822828A421A828622CA4824223842428B882C2824826028820F2221C8001000020612248141082C612B0420828480020880A142242002242222820C1521A22020025010088002A2484040022003F8F0C100148C0218003000020224102111001142411004A020048282C41A312113811001021022110420280322228B3
+:80328000422200504F004011111102002819C121100321181CB21252120000802401130115029682220340632412218220083022828038220010820480745B0A0000802101212400272124107182820110028002150220028A41020021A8212A0488882C8A081001110040A284282180049F440B80040010024A61154242222085420100D5
+:803300001220110222141602242008002C228484011E224A0242A82C0800400221002002F01996A0121120F2211222200222112A012CD1218289434282011C0120024826012024032331121221111280085021002214D01204224082044240F3E4A210010010210200211413024A01001382D2210129210221224810410100001B2482B0C9
+:803380001102808A220400800800282C0200485FE30C201241010018161201001420061C8241110200140010814142028A8202824814213823850480022100282100208482021F9F02190228808131112024A114181110111101008042012392211B4380212421018200400200183148222B840021000000004870BB0A00481228242800FB
+:803400002100183840822A01001911924118803811221682A8848E2140611416828422022054124222111119120120924200902222AB3E001942D111F221223B12182C21913313810215D231B513E221C3213F317122D1310119A1221D221B226AC7212A61211D8229F822122F2BF333112CA3261591212383B11262382BE42E42282225CA
+:8034800041E218283222242B6A00484E214AF44F7BB01182140116E121B222A221582693421B111AE211B112E22671A1F131122A9211121F13214122225413199123589AE529260830121A74A2F23212189EA24AA8A215A124E2250114212C82B22262242F24A224282A043FF804264121A241181416216224524E1166F3211321621C98BA
+:8035000082214012023419541214127A64111425A114A8882CE212F48383184E411D22228E521B44A229D822D82172811271410224002A94422260227E7300000024200200224083440224400200000000100221100221100280044800000000000000F08FAB141A61122A7231513115B222A2326AF731311F12F351511F31513115E33365
+:80358000F31113257111E33252332A022F160617121D511F17F721314AD511A15C2B2229E221B373F721133B111F12A3112F29B392E5163222EAEE2CFC232335F181831F2C5C2225E22282A4224AA442A0448D2E141B116E612AF231111B221B133A82A3761F37F771711F15F511311731141F39F98181371117111F1353113B22E017E722
+:8036000022F2A3911F17F651F11F12F351513F18F9C1512B991E113E321B661F3AFF91913F12F321112F29BB72A76E2B6EAEE22F2CDE33F223211F38F8C1E3272225E222B242A4264E422B464AF662628B41141AA1422A723151311D132F12A3136AF751511B776E711F31D33351333F37F793933F32F223233E32212B23F0615117323F25
+:8036800012FA71717AE712F351511F18E933F3B2222F2BFA33333F37F7A3F33F13F121311D132F2AFB7272EEE22F2ABA22A2EE3F32D21352333F1CDC225222257222E222B242B6228684F455B6141B112AE612F2311115F331132F1382A1761F35F573717AB7115131357131F393813F127223E32313A232F061711F32F233A11B771F1F29
+:80370000E712F351533F1CED3637921F297811F371631F3AFB31133F12F321132F2BF3B272EEA22F26F6A2E22F2C5C323D2135F3E3C12F2252222E2223E222B242B662E624E626F6D797A0120080012E1112220048144032812412301110018012830210012A012A09002F12093C012E82601248224003340000A02420043F4F0E001428D8
+:8037800034194221612611182818112981843321002180414201563121D021214C2241022E1113410222D02281D422082C0824130880022B243042224073A90C481B21B01162241B21272619B24291212F2699212F2419F142932AF44293222F3429D212A9421CE922E414E82264112F2264192F2264192D429AD222B491D222B4915222B1
+:803800001B2923B49132421B682394612B841B282B84112B84222B84A22B842229A842882E425E5880B411061B2146B2116224114A91212F2419F142B2C0932AF44293224E93221CB922D412E922C1912AE811F8224296712262192D439E2129B49112B29156221B2923B49132421B2823942129B881B24292212B84222B84A22B84222921
+:80388000B82294822E421FCF0500000000000000002100000080018800004001000000000000002800000000003FE90A180012C011298162122812240000111932C2108322A2424022912129682220A12126A22180082824114042022CA268008004A29022298202F0CF5C0026210180021C014260125880512280911123040086220C428C
+:8039000012800120240162181022498231A1602800408284820462422044019FDC0D184E2180018031218024012302122111169181294403A085828229652282260219810122424A08221234128A022D82224222244862808A94422D222A04F0EDF6008001B011122261122890214A010021222B1410228262224200190118004AE222210A
+:80398000212241022C08101102248A02002004282200007F2C06000000002A812212011A04902200124200484200130200200C402101122C210120042100108204224248280022DF8242818222022AD121A21222109112868201183888384AC22213A2410020E414C242682984948228281AA6422818202A86C462282A044223044A0888A5
+:803A000088A280044A0A1FE603002280429132221AC22121191802002B8238808204808484844283964200882033211820012B42002222602400824280AA864248808AF2F28C14222200182200001A021252181A02A0422CC1214A010060142A04C04282682848422212A03818426823C442004224488008002820047F880B11488A21025A
+:803A80002100208402203242488880288231421AA44812E02204221810210800002800C8A0484228282088248806008004885F370512481118002138282302A0812601222842003022001A0600824091211812808C050082306240024222212002208C0221003FBE070088001400008002008004000000001118A042C84821224A010018B1
+:803B00002823012400004242000022000048AF9F061901132102142118222302804101684A028800424280022A04A0421C2C94821A82A14800322818C8468224044A622448208A02A2004220F435F920082041028002482228883042808804221822188A24041429A128182022014220810424822428883022008A22044220240200821FEC
+:803B80007107002812122A110200000000282028822202002682028001282024040042288A02004800000000001002F09F870000008002000000800A1C8241113141100100482242304100A82004C042808462221448C04200802422024800F0D53614821422280080020011001A02821A88022220A8348818001800202682210400400284
+:803C00002C0824222C024622C42240A2242C82A22400BF550214124800826200288002000030410090128880042880220800481480A6250014002200000000000000DFBE01384800202304222200140080084280082A8104220000802208A0488A0412200800284822280020248204004826F1EE550080042280014280034218800800883E
+:803C8000203142282220120262224214141818200820810280040020240600484200F0184800800110022800100180012219328111111C08209441306138121388084882808204120029A82C1110024002240024A02428F06D2A80220962402201002002182002A0212224426221C81002002280260216022400000020020080040080028F
+:803D00002C047F1B0392281C05280048282002800200928004A2238888038800001948218882088E612246014A22C28100002800002004902248FFC5072AA32D2A02282F22A1418002800280A18822321BD2E8A0AA3AA614226E21210080A8482219AA281A88A2882A418228A6AAAE8168222002B0220228226842E01684F4946C1412866B
+:803D800021012A21A1222A26840222421A012A021F180A171230419062CA26A1222E61226A051BA64A24A2478E12482C82E21744926125E22442A2642E2248244AC4424A54224246A2424A82028E311081C1112A07282B142022A23215110132A0A818DE21F021A31CA59C1B8A882C4422A4311AE21A42A1284A84B941246C125A04B20053
+:803E00007061012124422004226890222B4230223FB90D1100204882040000000000480020410146116214400100423041221118112111211002211082140221100200F096D8141F1AB32162122A83A128006A26A2311D216A8481232272A1B181F1A1A11F1ABA61EC12B881B8E1A4661F16541117137AF481814AAEE6EAAE65BE622D815D
+:803E8000AEA33F12B241F693B33F3C7C83728251223F3656222125F242422F26B262E622F222222B222A2622E222B6DC0E221B6326A13218BAA3212AA244283AF321214A8681A322881F12F1A1311F1A28F262411F1AB8A1BBE1F8E1E11F1686A8134AF4A1A16AAEE61BEE1F11F4B1E32D418E8335B141F692B22BCC1BA246D122F24361FF
+:803F0000A0662F24B442A2666E622F22D22292222CB662A64248DD5CA0321B7314E02892222A82A466A0112AA26420A1888AF8B1A11F19F9A1E11BCC3BDFAE812EB14AF461C16E422B664AF46141EAE616A6A2AAFEC1B11F38B422FEA1A23B225E535AB5C2BCC1643815F163616AE624A6442B442AE624B462A6222C92222B66222AF68AB9
+:803F80008570A1B13163122AA2223AA3312AA6442AA21115F14141183AA1AA2AFA21B11F18F9A1C14AE416F481812EE14AACE61F16F6E1617AF75151EAAEE66AAEEEBAEB29BC22F281A23B224E435AF5C3C33BC64EA31D213F34B642E624A6442F22B462A6444E622B242E222B222B662A84F4C16CA0120000200200220012208822883225
+:804000008128124A0242008002282A082A0818800818A082200226010000288082840242D0E40B001828002B14000040010020418144A14800A82E4280240542208804C8200280242408484220840448800420042814DFB1011CB41142B11162241B292394612B1419B24299212B94112B94222F1429F242912AD412B931C4911F22E414B7
+:80408000F8214256F1234296F1214296C142DAC2421B2D3CB49142B391E234B1917242B381724293212F2498212F2418F142822AF44282222F242892822A84E822F41F4FC0411AC64119E226311190612B121B612B9419B2429B612B94222F1429F242912AD412B933D412F821521CF921821E81372296F1214296C1439E21249AE212A4E9
+:804100006925A3292F3621E834A1284693214E8219E2249A214E82224E82224E8222882B4229A842B78D0082200800000000280000000028008008410022144002000000000000280000000021F03C830024181400211124A888C04180014321612A882088A482284A2204468224020023AA418A810880820610228404294102438226081C
+:80418000802248F23A4D008604324D220089081211A81082B8AA812802132684221201A0121A8201C8299342382088323481C281122E484883032200528B2D0020C444481CA4249F8C4201433C12142604218D81242886011B4220B8A2A1182A61224AC84288481A2AA24A2AA5121820382120A3829AA41438A0848CA21600268884622220
+:8042000080F422D8008830444A829442CF3A0600A02124000092A028248041480488130222281100004229A4242D124224008A92848400C068462201482081014CA24280048028F2DE9310140140922120119661214001290100181218000000100860229A322410A2212E11281400206481002100C0829242228812003645C311284CE8FC
+:8042800022D11411B815C449508210121228548249492224C2442021F64AA2222D5523B216F4422412294482A112418880B144622313248992224E2232482D4246A21248282E8A8A11246A88225F93093114413821814C944860124012015602490952124304124AA28623B24411524A292601A84303441211902532130400422A314240FC
+:8043000022219C822C8CCB841A3288228F7E4931142288C01527121C911161A7242400842181002128180024812411225844242C6621C032A082322A8144029868A3831242622442222063820082001F340830441042C421105284251C01259614411044948830148A82B28864C140281448143248252C91142136440456084002304828E2
+:80438000278244418A12E482A1828504288C21F1F49D00482D288C81C4148140018074288484682858428004214C04124C0C80C128484128211548044A020048221D94A0818C042044946224809222E3644212EFDF4F021045012528025810480814161802C01481A922C418440046C21844582228002A8401128C02C91114081280A141D9
+:804400006081400858608900416E35004141279141AD1185021F24111C2814DA43E568012381D44888B41C824C344445984446384A85642328CD22C3129265612E141A2222149444226928618866AA415084472A28842B58CCB232E8840241B7B21002A71220C42422100C1484008182461484411822B2486388008021D184248404181215
+:8044800018104498181608841C014A219128414A01874432281018D448031F85040085410340021001004145484C4804202404400120C8444C246C44230415440400444241C03289041984024902222342342844604184AF150A1240C4144901138101811819118311921221104A1C118A1474421298461602120028224216A8214C023EE7
+:8045000048000044840068182280C41888222280F1831720544210021229D422014484188021941800160543154481242464445684411225911465C2425240D2242281411806212400541024A14128441A48388849F2A44410814104465841403118105642131123011285012440A1211018941184411961818100381044C81810044A51A8
+:8045800084811348082888401204004C2802BF7F4122588211274418814311088593112440625213428801181123D114017094010084502843B2580254583024604412C0480010B142012244C0828D14800114FDE680459218951264541054182110084651284464A0412001101814028004514418104438242E44002991444112003028A1
+:804600004CC21218604218884B212818448D181004806194904819941400808582011C01255261C048485100160112414A010016884608124904220082A0420017424304508442290841D0A1021424001562844110161411183444004416412101118400118450821018429812282200502280114241C413C08181B08281280152814C81C9
+:8046800028F85BF64048A84181800148172440424482023490284502491204117911084002884051241115082C04118411161824C888150C2D31201404222290882962824F510816748868D187812D545F21D134F4414247A551164162212447C1856751F04C115439018341D4417458B44851488334522B44463A3A4B22A9716111C82867
+:804700002931444B451C22D4487184C81A3B44D091512422417AF3342829723A446452283F95031F1411145B14E084A41416D158414F36125C31531B12239316A75111A3D134569B1F1654A4473447886F41E424F912549CD1C909C01A5E254975447424A2214C51424E1A67C143D3485811942E8243B4A19224246D4489E88CA928CF83D2
+:80478000E389524C7787242CD422D124F14316D7B5857518D44A1113DA83D19831434D55AD425D1885F8211A27614D1256F4445449714151823551111241457494711EF444362F41F425421E243A43742CF6324B8C71148461B429B48898289D212F41E441F1D2541EA4C014CF4394948A9894AE18FFAD071100140000001200000060829B
+:8048000060824604800448800558A042200218118111A11912922123843242304230423042100200812FFA447181734153398F21F558D97F11FC4A4E7F71F1535115F115131E125E545F35F11212BF23F3181AEFF3F25E56AF21B352F218197E7897A59FA4744CFA525A6FA5F55652CF64F5D7D76FE5F1363EE7E56F65F112111F11F319B8
+:804880001F2F7163F33FF1F67B763FB2D22BF267227E73BFBCFC6B4BEF64F544662F6FFFD4562F24B4C6BD54F79C98CDA849F116A45FA8447115F71D4E17711E568F45F5DF45EFE4751FFF5F59D5F111171F21B173F75551EFA1F33F35DFA1F13B398F35F51C367F31F369294FD5F5495BBFA4F4CE5A2FA5F596CE6F65F51C56EFEDFD5FB9
+:804900005F6FE3F37A3FAFF3F376141F57F7191FAFF3F3325B7FD1F35B567F94D4EBF3EBAF7F67F3CBC9BFE4F24E567F75F1F2F66F6DF172746FAEFB5EF8CFABF93EBC8F82D966FA449C7045D775D57D51648FE5F51356B5FE1717BF95F51919BFF1711BFB53716F65F11216BF22F31A1AFF91F1747B6F61F13D5D7F51E197F749191F24A1
+:80498000D4C9F8585CCFE1F55656BF71F5D1D38FB3F3763CEFE5F7165C1B314D643E16AFE1F33312BB35AF7555D2AFF6F147645E1FBF9EFE4A2AAB5457342F4F7CF4B646F6CED2EBFFCB99AF8AA89ACFCAFBCD2634777DDF61F113134765AFECF51B1EFFE4F11C1FFF95F51C159F31F11B123B757F35F43F1BFF73F3171EBF91E1B7F7140B
+:804A000016FF93F137754FD5F54D4DDFB4F45E8DCFC5F59C1E6F65F51E16DFFDFD682F2FE7F37F7E3FE3F316644CF63C1E2F63F37716FF41F378776FD4F4681FBFFCFE1196BF8E5EACFF74F515172F6FED6BF176744FAEFB7EEAEF4BF9BE9CCFEAF9ACACBF7B052901618421484D1184452241424883441101154804301181001185048500
+:804A80001403413022501460125014501450140040414821890264828D24824482BEBA4042C41215885181211B412115182241013C31142041024E154118404528011224446D188B252456041A42428481A41412E08854188410044120421284618240F93A87C0421F4152281F417248F11124A3D441B24AF11124AB9419B24A19F54A92AA
+:804B00004F82F44A9343F24A914782AF14F924484E954FA2E414F8264A56F1264AD6E1A2655D2EDA9E242E4A1F49C2421F49D228F1912C83F4912CA3F4812CAB141D24AB9419B24A3995AB9443B24A39342B94478229F9344889F9244A4F4D06ACF411648D421E24C7141F41324A1D24AB141F41F64A941D24ABB451AF64D984F448B341EF
+:804B80008F149944AF1419F242954F82E114F926885E8167A2D6E1A261542E9B9E252E4A1FC9C24A1F49C6521FC92276913C6217C8AB161741AF467881B46AB195B24A3924AB9443BB4A792498926F83949A4F22F53DEB402808008200000080820100000021008008000014008400000000004400001002308400B0F40340C21415E21162
+:804C0000C4184601481994481A043018008C5428C181410026282471444282C13610C2882816046C81A2828C0417822AC99A70823141C08880C8281823840140F492EE10B1812312CC288615D4415112441885C1482584CC15178941C04219285448874411257A41041504118C83224235C2148445A2414712484148481222188E142124A3
+:804C8000434186B88CD24A041C44F8EA5B10E18C9314D43B43C961145D12194411DC812142E4816C111B8185447A4CC28A43142455298994414918237121B611028C52144B854679147A24A2C14D614845A16856522426A1524489483294EC2258486D1A0084CBAA0011230281191804C0444A81744802101488044001814588426241481C
+:804D0000442112A428882821002042088C826188188214922100C012AA240442413F9D0C222861805141403844008A44234824C11412292302000010081229014B52838421BC2241941240D241A2148424484248241220422601002A04482727241691142601469418453115126AC1A13210981185C2E12618D822E1C8644F844398AC2725
+:804D80001616445484B042018A922822441A82D848F3A41810B6124A84888181042522B122FC4428274C238A0A7024F26BB930222215044415041C911412A28A1411D24181F112811A323823914C4A02402202444412124C87E481E2222C82911243512C2CC2148B2141C2002418A012224D6A8A14026860664FEE0919311429021AC4187B
+:804E000015148CA424142A018308844916188232824B81814CB88C9241160C16189242E0820860412684C828B251422308214A818544424292C42911A4282A08007B4350424A811224A4821614423C8C1068C14126C2142948228A311429121428293425440048248C614247A2464234584931128818206821412412234208121884221019
+:804E8000827438E45201244A321818320020021D1813624A18412618081244291A0E7014D814CA12D081B138A42119522489440812427044B82821F42C128C8244584230284848408A418211C224127F840422108212E41831286011003042A116081243518440088486041088021062412280042228804214085048929884821883912226
+:804F000041008C286281F01C99244C82B31892144B211C1108167D88C411341A544249F12A16922CA1184423CB2C448D84C113321963321836AA42222E16C143869424842C61844B12421884437598C2828321B818C4421AD268112822288211B8D4068602212842284F22012210C828896881811018D44822514810088849C42440812451
+:804F8000D12411A8425022122A41B424618889C12C2B82842112248460810018901AF0482443F2B17420922418008121A426212201141820092088413AAC82003818A85048449024C0284228A02412299218A9328441128489428221022284221004429F350A848141441B41489180215112892111A8121914228881288441024282304119
+:805000008362241A7221886164182E12240022830882128B128008381012A41C4120849224F0EC8320088721100814004008846C04448210B2642889084410141224234242140A40044C81112801448482812E824440849112812361888E128440F8EE8800106121B08401442487414014111A984289110484211118A418910000284200B4
+:8050800044144CC14244D0484405A28180A418C99228499428411084248421FAD139304516084A81410A4008140010688100100A442200302C18450860880042239118254804418001481812821218002048048034129F3F0C1200504100B06101442D1C800180C8182041943882848445224408121A981134C412240012301240588441F8
+:805100002880210441241088252111048D4E00C0481098124E161821200148008247A1D042048490481004602252A18304181A460444282412888A31A22081080000444200A04232F07FCE203184502630829014244D2800A74146A414A514D24A414A140236480684224B144262A1235122102A8404A512048634145022222F2204257233
+:80518000A8642482A4A01444189489F4CB881001198632844124404492482504286180842221A418112111890198002321644485012C44144805850181482AA14A4004680000289128C4292CBA7F06137388E813219481A72125D882E121F1283AC1F0411521D029B84ED842E129816184C11E882544D848DA82D541D82497162F2B71268E
+:805200007C286864278341472343E18344783844EA4A23E84218C26216A25147224F2443B84A029F8186F448488D174AE665055C74A4548D16D62491941667611B2245E425B11A11FA5416A7C56F81C112C783426F6C3A923F53AB484532424512E42667816E484B641CD124D182D624F1724227C48161AD1186D845098D8C5E68AC638E02
+:805280002D98242BB14467418654424D84CAF332144E21BE884BAE8021419236AFD1C44C1314744E3112354968818D482CE34C64898612FE1848C969888B329518CC193A721438688F2152889F2D341243F148441D1489D172C21647236B9483F91EC84F23B38CA183984B288744858CA4821E4A8F81AA141694244BC3817FBB0D139414A3
+:805300001143924110111411140148644854124448441A041A44854481410114800289021992141902193242282304632468246024602422462212280810F89EFD141F12E296F2393F1D13FFD4F454559F14F41911BF95F53A37FFB555BABFD4D48CD1A8F3189BAF91F178F8AFA17988E8A8F449C88F9EFE524B3D418FA2F673733F27F7BA
+:8053800013725FB7F59F9BCF89BB34F3323EBF72F251633FB3F32F2CC5F55C6BEFEEF6FF6FE764EAB6F2B3DCB988F4DAD88FCDF95A1CED4C8F8EFE7CB84F8FF9B5D48FE8FB3C7C4BBB2F8EFEAF37141F12F2656D9FF3F31152FFF4F45F55FF55B51BF15B5BBFF3F35B5FBD19BFB3538E8FA1F71AD3EFF9F972FAEFC17D18F88C4EAF96FDF0
+:8054000039398D1B7D4DDFFAF77777FFEFFF5774DFB4F71F3BFF69FB34367F61F116162F24F6232D9FA1F16E67CFB1F2AF2DAFAFF6DE9EEFCBF73E448F45B7D8F39AFCCFC8FD5E7CEFC7F394DA6F83FFF4D84FDFF9D8BCEFC7B7B4EBA7FC85E5F065453AF4393F5F61F35F1D4F45F15959FD1CFFF6F43A16BFF5F51A1BBF95F74C1AEFE4D8
+:80548000F59F9EB781CFE6FF1298CFC8F9D898FFC1FD38B9DD1E37A4FFF4BA12F374472FA5F5745EEFEAF8BE854F41F3525A65FE76467D668FB1F11A12F762EFCB714FFFAEF48FA3F7BA78AFEBFB7A382F21FF86D4EFC17146F68AC8CFE1FED6ACCF43F55434AFC7F6B8BCEEF81B34145F53F53C559FF3F35636FFD5F15E1BFFD5F51E1CD6
+:80550000FFF5F53A3FBFB5D493F15B3B6FA5F17E5EFFE9FD9F9EEFE6FE56DCCFC5FDDC9CEDDD9F975FED77E4EFE5F85351CFFFF75A78CFE5F71E3EEF5BDDCCF27E7E6F61F57353FD24AFF3F35A16FFE3F1FFDD8FE5F9AAFECFE3F3FA3CAFADF9BA78EFA9F9CE9CEFC7F11656EFEBFB5EAE6FCDFEFC9C4F4DFB7C7CCFCBED82FD457F2002AD
+:8055800000000020412201122482444024482449041092282189921283948442219014100218844909224042486281404864812001124A02EFF40C438802446D121E486041C024A140425848418971141812847124481144312287512154E05192824424444890184421446049454248A2282443114818528421848F44381481226FEF0559
+:805600004D421F41522C1FC132481F41364E1D24EB141D24AB9419F24A9251AF443935AF5439A42F547934F842B54F83E414F9244A4E854FA264114FA265192E4A96E5A2E449E2A2F491244F32F491248F32F1912487161F49766AF1816CEB141D64AF249961AF249945AF24B934F44AB24B42ABB44F8A94B24F8294984FA2B4630845D22E
+:8056800081D624F1114483F41164E5D2C1961619D64AF91164ADA213D1483A35AF44B9A4D45AF334482F54FB36488F14F926528F54E922EC54E8A2615D266A592E4B8E252E528F49F2244B9E648F32E5497268E1497662F1816CEB1419764AD641F66A825B68AF24B9A4F448224B4A8BB44B4AA9BBA6941A4F22F5E9C440080000000000BE
+:80570000000000000000008800800214008480048008220000800200000040017F514A2294112411404544C8481D121986791108D449245224124F832443082220B212D28441024881272230821F288431812584C22620116B882A019E42888484884528A14112430849F29E557011248831282ADD2233584712308440294485C41283C811
+:80578000488A4222B864886188214480F212888416A48210C8122230382C78942831144422434198228001267441289822144483C125819FDB0F4671410880FC16214CC521425B1867168D11264954944B4129189C828CF3A2128C82F1388260621AB218C898251894212185C2821B8427848F38428481229114B145383C28D2239828853F
+:8058000024183C1246C112811428DBF69016122CD181A212104A1C0820A81411429028483849044B48000070240220C58828211222121882EB8216140622922400122072482188224134944C52847F3C071410420884831481C148244021482103C02113CA34221014080012238242428401401416911A4480324C00820042478142206456
+:8058800082444301A2BF680C6B341226E922C129715302423B128B25B28252427016781A61814C3148462422048B2449334AC14E1890582024BA44A13816E181C8421678974204A92C2415AAC11C216888282A38124A2884042BCFC05412111602A575480452130100582092142D188C61184A21044884A01221C128281800A21886240100
+:805900008C91122338244598C8428E12804C41C8882882A142002AD8AF4D3221702298289C02131201A3E6A285CB81881C642181111CB214322C438212042E48448C64211E48C04A445890443865F181182354844D13201402488112529624044AA22149B8442104BF6D031C31442C9228160B182225183213228F497282022144124728B1
+:80598000241688064243312449420410B221810184882626288125082021914428228200121E426A412458825216F2F932504242214014481464112850B2444C0389C22840B84C81D84A982824568A48022D98C3C1121165F28864C425158254C22120124E449214AC31381E448C0126180C242AD1424128B522040050214844100A100830
+:805A00004049C816102621220418818810489824400800122820C121C0284788188449042048281818064489012844F0E6E2C015442342F91E429014E962B12C12D881B21A78830E6C514823C18827C41AF484288361A44394264D22859638856281124C916A43F1268129A281671123E588C22CC116E841844598928E4C98818B21C38539
+:805A8000D568818863C4B03E0D21408242410C10023C01205128268812C41432A988840289088160484901272290840044218C02C082124110A2218112815042D04202384588C1425F72064210198924C1488CB2184408833124608649416845481428456821200448224A8882C48550A424881129211182021A0820294182718488C18657
+:805B00004B124301422212888FB20C8C022D224A02938201A082242211450884A2882D124482801804C40081867884022028483284438822018410442402490122230800224004121FF70600008420021004A4400228120026820140180645180200842E8421C42042823818881012144202648041040040280442DFD806A490411021589C
+:805B8000221C1113B11A0CC92121281886866881140080682248A48C4502258284012041582410044394184A1288024B242034184210220110F2AD7E3081124126485C282084023C0224002722C032168282341248C04216084440826641408204849018A442808204428A0486948460C421478C8304214528F163CFC0288430422E4280C8
+:805C0000444AC2188C0840A81248128C2832892885447488040012120080112151827012018008834128416441A021308A30142001169412483FD50540E28204001890442AAC142A64848A92488C211862448008009810023084430121C444459214822141818841208862820090140000128882885F75071D442830112428C041404201DD
+:805C80002B1898214C08218810A2614BC11002B06861484A02B08424E588222418282814DA28641CE0411418A8428A9448428004004004EFCC08A4814880825121C0321745281DC42449223842106C8243D88504848A8491448949028428894501488485811408428881308A2C684482192261828A01E025028221228E9CA0468788B53C8F
+:805D0000536490528D122E54812DC12F26F214BE27A8AE884B9238AB138B486552388741C7412534866085268AC8222744944C58C94D2A21B7D12B112B835624428855648C6188A9C386511632AA122F4183A8222D124F4441A212DB9EC021C0238F82F448682F23633417962D286F2D7881DA89541A8D84A9F4122A29E8A4F44492A6BC58
+:805D800092DC84856D8848A4ED424B618F48F4A8CC48242F2BC4528B4964A6F2888A47A818CF84B8C878C77C18E84FF448222243F7421483A445CFE8B94424741228A5284D1CDAFCD6D250252F2122C2211352981E28297451F2217D8B3792424B114E328F4C7494FA84A42B239DB11F462222DC2CEC24F81C6490182F85014F23FA1ED447
+:805E000043B414F84284C849199518A5BA8244B2182A94864B835EC8A0C94FC8DBC4290447C14A4588A881F0AD1850414044418441440100002041840412004220044218422084218421044200184C14C2442148214823A248214821482148290240082F2D4DF161475FF5515D5F51F5484AEFF1731A5B9BAF83F12B19FF11F589321F5F77
+:805E80003D98EFCCF4DC1C8F8D7B68F85848CF27FDBA98CF4AFA8C88ED8629D8A831128F26F21612AFA6F2A6A4AF88D924F9CA8AAF2BEB2878165C158F69FC869665E628F4BFB7DE9AEFA1F936322F2BEB63D533D12AF63AB28FA1F95216AF89FD3C3DCFE7B754FDDCD8AFA7F64747F061657F43D799E281F56C4EEFF3F37A73AB73EF457B
+:805F0000F5FBD1BF5BF9A932BFDFEFA8F88E8C8D1889B328F35CECCF26746BFABCB4CFCDF91E162B8CCFC849F838AA6FA9F9A2A26F4CF88A8F2D96AFE8F9F6BE6F68A8CDCF28F988C68F29D92A7C8AF2AFB72FE8F98A9CAFEAFFAAB22D327F51F81E926F62D3AE99166B98DFE3F37674EFC4ACD56E72EFFB0F5F32F4115795F31311CFE4A7
+:805F8000F45B7BFFD7F37F3FAF83F33F3D9F4DF591323F1DDF64F1DEDECFCEF2F8B8CFCEF8D858CFE3F9B89CEFCEFE1C5CCFC8FD84C48FA2FE366E2FA7B636FF785A6F63FD18CB6F21F5DECE2FABF3C2C21A5D848761AFACDD82F8C44EBF17F3D89AEF8DFDF2D6AF8FEF2577C3F5CAC6AF86FA5CDE2F45F1DAD8CFE1F13E7C2BD1DAED221F
+:80600000F39FC9F065633F63D3FDF253391F96F47F7FFFF7F73F7DFFD5F5BDFD9F9BF1B13AFF9DFF1C1E6FCDFDECACCFCEFBECBCEFCDFFBCBEAFCFFDEEFCCFE4F54C5E2F2CFC7EEE6FE3F6F26A6F83FFFCDE2BD5EFE5FD1656AFEDFDF6766F6CFC16D4CFA8795AF6CEDE2FA4FCCC4EBF37F3DC9EEFCDFDF8FAAF2BEB2DFDD715CF2DFD6610
+:80608000AECFA4FD56144F6DFD5E5E6F43F61CDCCFC5AD229D2A200261702641782403260326016088A0482C22898204820010022181698102908210042908988440882828420812400800124E248281F01C8F204804283412904141134842581241853214105422224C391420082144218A52248241502244490818860882208148040023
+:806100008244C01441814121844604EFAC042CF4112485F2112C87161F41B24AD141F24A111D24AB9619B24A19B54A3924AF5439342F147B24D812F924481CF9244A8D814FA27418F1244A96E1A27498E5A2F49824ACF491242E421F49722CF29124EB161F49324E1F48B26AD141B26A9921AB9451AB9443B24A7924B8427B2498B24F82F8
+:8061800084FB244ACFE20CACD141D628D141D618E141F442111D2C65D1C1D24A3881AD2553F148A443D2527914F84A855782AF447926F848B12FA2E114F824925EA52E12D661A2C6E532E15CF224129F4DE2A2E149F42C4113B92CB191362E1B69E7121FC1F42A841F41962A59D61A99442D344B4929BA2494326F81D442FA344A7F5204DD
+:806200008480040000008100280048002004210080080000140084800400000040040000000040016F1807800144232194322A018B4222390D488074C4C182902820E584014825423414884334841628822231141AA8822349289988842200204522082922B8124A0A4846A848FE271418A67121783229C2215036224531122608160E8A74
+:8062800062814C827384821544D428022E442883860224F012488165820218478220A61247221845484818C8844A614A8C5D48145AC888819E21C1EFE447014E29AC52781AE21462214F3201C73249B22321721C8222F881584C0A8F2862214B1483242334E2F01468824CD4247811CA48836221124E982C3284A018884D2A22C18481874E
+:8063000046641A6C422F8A514819C3882532488F11CC845F360F1812141A023022208284E1880448A0424490324142C014A450244C022800A02124444302981E2881688B12800100188220282498821A948880C2485F5B034110022215681244411124150800304284288488100840E21112E21402C018200225024B82284AA128E0810298
+:806380003048908210284204A04144436244F03D5E804284421131122C912124B0A2248251628420D242225842222A34118396242F9254484425F44224361634544314C41412848612488A84285684218C25E4418488416885260C8CAA1420F69C7600442114143D18224C0214E8281245420870222C1824AA248381C424A4164E64422713
+:8064000044284CE1412444644140A482836428A01A28C4A3848198448112816082100842229F11074C02282002165112645022942400306260228400142648E21432212419846261819024249012890A236182488142008C344212822844834524E542B8241584F4E7C980240545014D1890188420C82244815642095982421841982122D9
+:8064800021184200282942841241A8484440982AC18489024E124F88021618088B24223022109842A025DFE50D2034184008414071440291C41F280300AC014502690841448A11931241005024918CC22442899122521AA22424160849A18260430045188421012F422164A1CF9F0800C0281A0228432211081A04211190144028120445C0
+:806500000846420C8D64214A51848421441880024100124501804408481212421A1208523024D0714D81041638212E18CC014C43C844884E1AD02128146A414FB221624221504143D262145423CC11A4252D288421C42AB1248892182D2889C2385E28556281242E9826C8188D14B058926C2646882165414996483F36068212400C302419
+:80658000841C411892218562811C1101104848758498280084422E420044414C1202484440B44241048C021A242408481800123810A84220F24ADEA01221209112872389C12C818592A883322880124808288128188012082180022148614125124404108202830441A9010040044B1238181885042B121F5A04C42830C844C024122823E8
+:806600000216062902127024187222144241410416042200844483821128C228A4800118184E148B1800F0C1221812188622846282A012F02EC7601B46429224161C24110860220041102242C124188C8282410884408802A4403818301600221612A441443042005800180022200840F8C97340C814110048003502414C440283322411E8
+:80668000219140544940D248820218848C42140840440318C440480184400584428424422548420228005F7B05404C225128430141288110088184000000220040682200842222004902840040449824610000849028442A0118C0184964124FE20C4121848C3222899224000028440010440400402282111202412722424984621200413D
+:80670000252412042283241324031859A22144284444306C44321AF439720000410081248001006C0185551881120050128901224185044180014412840024004C045028818C1801242C0810D248022810D84408848A1202118825018122911001420026123C281284122400262206413829C11624C012181869018C1104846890288CC24B
+:806780001284C04821C9014C0141F027BD40981848A02800290448212546840225023111120025042E128008258A61442814844048C2455094220046110244488C622290144042024221F0CA63A022CB68F03E1426EC214978187823B82862A8813C120C491266822E3526A43236C11785382C2C5126CFA2B42C7224E865B414B218524836
+:8068000025EA423114456461497112B448A4411CF48E22B301118D412E221E124F21E5227318D4847134C4282E212E284FB40455A61AA1A4871828CD2744D0A2A5225E288425C42AD426D24F128F5384911361222D2A2D24282942586225C84423F212224F416221A762212A721AD584F21134C3B41EE3458493A88B4547AC1A312CA37637
+:8068800016542236F28848C9F414141AF129EDA01127E11582B616736EBC32F124428D22505A27226584316AA3519934A487A1C02CE04102878222122489B32CB26A51C45D181047E8B1110E8312C42C464E484CE8823111A5D8424834884B722992322E1448A9F47BB8100111102114A114114A1181012C012C0118403214100541001202
+:80690000218001188011811181119112151812811881082C088880080000F0B247141F39F3622C1E1ADFF3F3FC795F65FF5B781F54F31B799F81B739F348599FD1F11E1EAF25F522329F93F33C3BDFB2F22E3E6F427215F53D39E7C24FC2722AFA3616AFA7EFA3F22E1A474219846291CB322AF2242345F527219F83F22D2917353F13F348
+:8069800051123F37FB9581AAFAD99DDFD1F991936F6AFB8A9AAFA3FB36BAEFE2F172543E187AF57A6A4FE44DE162F363659F91F12F3D8FB3FB1736BF47F76935AFA1F52B6ABFC6F62839BFD353CE8F84F421399F93F33D3B7FB2F22222A7A27751DF93F33A182B22EF6A1AF26AE8CFC3F22C3ECFE4F42C3D4D248FD2F22B273F72F26C6B08
+:806A0000CD1FFFF2F62926AFE2F26A6EFF53F37D3EAFE7FBB6A41F12F27878DFD1F991936F62F23A3A6F63F932BAEFE3F3565E6FC7A711AFA6F7CB31144B334F63F7353FCFF3F31912EF61F97E3B5F73963A8F84D2D8F2584B3D3165F64E4637319D199FB2F23B39AF82F33A38EF93F331358D18A42FA2782EFE6A6A87A3EFE2F136162F10
+:806A800031F41C3E16F835391F11F214763F63F2333687F1EFC3735CFC79722D5BEFEBF31A9C8F83F359395FF9D5AAE922D3AEF1EA7A4FABF33E1EAF47F53E18CFC6F4687ABF29075F7BF33676CFE3F33E3F9FA3F35E7EEF76F33C66BD19AFA7F34A698FB1D29FF31E1EEFE4F4332B7FD2F3292B7FD3F1363CEFC3F33F391F73F3281A6FB7
+:806B0000E2F226AEA5FAFA7AEFE3F22E3E6FE5F5727E1E36DFC3F3343E2F61F31E76BFE3F37B3E8F51F1383C9FD7F73D36EFF6F7FA3EBFD3FBB9B18F85F79D5F2D926F6AFA3E3A6F6FF7B63EEFE3F35C5CEF87F71C1E8F86F614ED40016F12012501144001140040044C125128803211280080125248B04812062120022170220245022202
+:806B80008C240280444348028D22200485044FD709221504118B1213011D24A7221518C828A10010382420912284408242082240428481E2A241846141C024896141238412421408890121433248224C31241826082E433F65022CF4112485F2112483F41124A3D4C1B26AF18124AB9419B24A19B54A7924F84A9143F2429347822D955FCA
+:806C000082C4954FA2C4854FA2E451F2244A96E1A2E459E2A2E449C24A1F49C2421F4952281FC932481F49324A1F48B24AD141B24A9921AF2419B54A3934AB9443B242F9A44829FB2448B84FA2F4944CC04A1F4146F2116CC11B21811D24E11318DE41B24A1AB548BA25B44838244E8147821CF92748986FA2C5814DDA4E81478286C14A39
+:806C800096C54B96D5A4F491283CF4916C3CF4912CC7141B29E7141B29A7141F417248D541F24A3353F14A2443B24A21D242F1844829F91648886FA3F4D69340280800000000448082810200000080010000000040080000000040042800000000004F9C01223011842E5268302124998442094021328883844454488042C8421449A6240B
+:806D00006228488C815128801184511886088921C48DCB285883084C018984B28421A11228844D2846F259B480F18314F0A612818218F0128849C8881219E45804868492A484424A62865D488828472281C721843024A827463AB824A42822886148C3964216A41248A92287210C4C32984841462435C41C44F4FA6580F2C619F0861A5E18
+:806D800028230E1123584322112655411CA28282C31628542C50948349627A4CE443344AB04472919816A400478424C18CB4241482748469224F8421A21258288D6489694116C4242E522042F6BA5F80011C8102808192188E48896881428A044189222814A4242E484A024A028942882202224AA2924E242A8982198148B84861412AE1DD
+:806E0000C824E28904430880A248A041F084488744484EA6004001830289912121482284000021002044080045021812AC2404128002100481000020C2288112004A21181284118442F82AB9242443C3182332522269842454248CE819244402418B144B289A522C4044346C90481C849482493314C396266314043902287244C3922462A1
+:806E80004B288308184CD484312422288A24322C891204A77C4002182992422458683044C041001024B1842258482304604460C4480049036230464C020020044400A28388220100622C820C83122C12F8DFF624E044430989235284142304A33A9846C422002D48A02100E14426082C61181E4298469A5445EA41028424266144288B12FD
+:806F00004426C82462444312382843751864421282302416342244187F74012AA112400289824661842C231A084054432A819328814B21881A042C0230181880082306498182C28289223121C821301C944A82B4822484814224083260447072061012844108800188804108008224422A286442224441469444409858800248A0844100FF
+:806F80000020030020086082921A040020014F6D0611100900124031488448109A488B84C1901400002800264A140422001A02206141888C128802004A224858481084142862C24508005FE20617231A0212A1811290412C6B8A8110C244B74C8B382E128F4132A81A868292244722C04887418321218282841324341486C4A82E18208CD8
+:807000000285C441488678C42814A425C1828574180418F0A55D00501C0028621311C848A0418184814004424034844A0190444C1242C44882242848122A88C212001D282622011283A22846026083881A8422820246041FC906250200211008222002200884881082042220084800800420089A1284820122002002188011042220C21407
+:80708000414C722448A4422F520F16C424B0128201304400202C290100208429048248504812444844443220422412C22432009024802A28010044C01468488924815484EFB7072442208301812002284A48840800108281848228044985014248412800322604438122020022A24988A1124100203314424C8202812F2D07ED188F46A4A3
+:807100004425020046045044444BB22A2312880848C2242552229AA1118B888A68484004132188D28C58A88B646AA414009024004D14444B2228224C02442A4464A4E7212D463E54FFE8020000002002200100008185042008006042000020042002008222000000002028042021420440F4621310781288840400A0140041CC228302002A
+:8071800012002502211898828800264431211C4298288C644448000082004144222800000025C22429B1D8098424481800000040048C0200000010021880684244442042410484284841A028000088442A888284880420044421288FE902298144021218000044800300000010061880080020414104860C482200000050448002004004E6
+:80720000201802186F1B0C001210222101000000480000000000800200004042042604228200000000000020040084411605A5384C12422244000041B024E28222023088124052222412A08B8A22082218131231218538188B44CA24248802800C4514382420220100401252281AF3367340D2888484140200524044544CA0220000001094
+:8072800092122A81018A0800411414508484224A0400820044444584A22242200880382421212E2C40041022018418001200100884002800000010044441C02220222201448008000088842044820430440028F0B3FF001280018001141210084820010000000000284820021004002008448002888820280400001004008F6C4442061AD9
+:8073000041321200B051011A112861848001841A010000224C226242702424A1224562222812124B2249AA82002004821028044A810480E44828D2C812F456EE10B2121182011A212182040030184250888D840082440000104404266444C0244F4288022028E84208008880A8882004802895244004D0360C18442423814394181880013E
+:80738000508810080020020000222828489034A0224160422E248244A028A0288A088881008AA448234404424141222E24BF64042F22D222A2122B111229012C512329F812131F11B189F991898F84F888418F842454911148955C884E488F44F424444B242E24222E2480524445A6222F227212C2122B191AB88228E828592229F81213E8
+:807400001F11B188E999F848888B488F8424E4840448855C884AF68D8DF0262625A2123A2111021C5122213CF1111119ED897818F88841CA2464941501848588F4484445B444A22622448052424584F3262625A2321AA1812B8982502229C81B1B1119E889F818888B48CA244408405888483FA90100141100000000000000000000000028
+:807480000000401808000000848100000000000000F07D9C0040110100000000004042024002255222250240424202008481000081810000000000000000005F7A0E0014110000000010024002502224000024250885020040588840180810080081000000000000005F180D00141100000000400210020021240010028518080040085001
+:8075000088000010181808000000000000F0746C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000E7
+:8075800000005022212100240000002125021012020000008100000000000000000000EF7B0F0014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000CF
+:80760000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000E7
+:80768000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000000000000000000000000008481000000401808000000DB
+:8077000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000000000000000000EB
+:8077800000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07DF4
+:807800009C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F540800141100000000000000000000000000004018FF
+:8078800008000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F5408001411005D
+:8079000000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000000000000004042420200000040180800000084A4
+:8079800000000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000000000000AE
+:807A000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC70900141100000000000000000000000000004018080000008481000000000000DE
+:807A800000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000068
+:807B000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC70900A7
+:807B800014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000000000000000000000000008481000011
+:807C00000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000086
+:807C80000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000000000000000000000401808000000848100005C
+:807D00000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000002424400221212140020000400881008100000000000000000000FF680700141100000000000000A3
+:807D800000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000020
+:807E000000009F54080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000021212140020000002163
+:807E8000210081240000100800001008000000000000002F75090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000404242020000004018080000008400000000000000009F54080014110000000000002421404202004012425828000010088481001018088100000085
+:807F0000000000001FEF0D001411000000004002100200212400100285180800400850880000008181000000000000006F47080014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000073
+:807F8000000024242400002400401808001008818400000000000000009FC8050014110000000000002125120224210010120221A10000841048080000818100000000000000DFFB090014110000000000000000000000000000401808000000848100000000000000F07D9C0040110100000000000000004042420200000040180800008A
+:80800000008400000000000000009F54080014110000000000002421404202004012425828000010088481008181101808000000000000F076DA00401101000000002400210010420200215088810000840085080000101808000000000000F07684004011010000000000000000000000000000848100000040180800000000000000DFCA
+:80808000C7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000024242400002400004042020081818400000000841008000000000000F0731D004011010000000000002121002100002121840000100881840000101808000000000000F0BB1A00401101000000002512120200EB
+:80810000240000002481240000818100810000841008000000000000F07EB60040110100000000000025022100000025028100008400848100000000000000000000F02C44004011010000000000401202240000502240185A220081008184810000848100000000000000F0BFA7004011010000000024242421000024000021855A2A24E1
+:8081800025020000818110181818181808000000000000D0840E0014110000000000000000000000000000401808000000848100000000000000F07D9C00401101000000002400002125121212121202A48548425A828484854808008100001008000000000000F04E9E0040110100000000004052222421251202002552222502A552227B
+:80820000000081008100008400000000000000F0162A004011010000000024241012120221000050228184A542020000818400000000000000000000F0C431004011010000000000000000404242020000004018080000008400000000000000009F5408001411000000001002000021000000250A0000845088400800004018080000008B
+:80828000000000F0573600401101000000000050220021250200502240180A00401808848100840000000000000000002FEB09001411000000000000100200212502240081002502100885480800000000000000000000F05C8D004011010000000000000000000000000000848100000040180800000000000000DFC709005011400100FC
+:80830000000000000000000000000000848100000040180800000000000000DFD10A0010010000000024000040021012120224814002008481001008000081000000000000009FE707001411000000000000400240420200100210020084008100001048180800000000000070C50F001411000000000000000000000000000040180800CA
+:808380000000848100000000000000F07D9C004011010000000024242400000024000040022400840081000040181808000000000000F042F400401101000000000040120224240000244058280000100810080040181808000000000000F0B857004011010000000024002100104202002150888140024008508800001018080000000014
+:808400000000004DEA004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C000015414101000000000000000000000000008481000000401808000000000000008F5A0200141100000000000000000024242453
+:80848000000000008481000000400800000000000000F04985004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000040424202000040020000244002400810080000848181000000000000002F440F001411000000000000242140420200400284850224001008100800401808000021
+:8085000000000000008F1C0D00104141010000002400210010420200215088810000840085080000811008000000000000F0D343004011010000000000000000000000000000848100000040180800000000000000DFC7090014110000000000000000000000000000401808000000848100000000000000F07D9C004011010000000000A2
+:80858000000000000000000000848100000040180800000000000000DFC7090010011400000040424202000000000000008181840081000040180800000000000000AFC8030050111400000000000000000000000000008481000000401808000000000000008F410C0014110000000000000000000000000000401808000000848100005B
+:808600000000000000F07D9C004011010000000021000000100200000000005088000000401808000000000000008E3B004011010000000000000000404242020000004018080000008400000000000000009F5408001411000000000000244042020000244002000084000000008400000000000000008FBF040014100100000010024070
+:80868000022424242100400240420A40480800000040180800000000000000FFDA07001411000000000000250210020000212440180A008400401808008400000000000000004DCD0040110100000000240025022110022502002481104202000000000085088100000000000000BFD14B0116410148488C34242028225858442884805244
+:80870000482001128282A290928001224C282414420882C0482A1184240282202884C224C483A129892209126F6E061964848146591C45D824324866946417413832869884433224C921A329E8988E425646C2523830922388ED4489C484412AA4248146F8984441C364862AB814C4242A8112C4A443043A3424481A088F2CD148BC520C20
+:8087800011994531415443D428E6421484641120018800842822422044041E2226420218A0124B480080028884B0283128A0212200822200462821440842F074B700100800008088A281918948342C2828818A01181852A0480082201804444522464828B49404004A082009414CAC243034848222188378C8B452040040C84810148884AB
+:8088000012044084020000288888860221181218211200C8000081802414243244412002000080810124241FBF09420000840022412092240010C4144C019800218200828028A48400428004004548240400220040342430242888881218AFDE0300180000000000004002000000000000004800000000002008000000000000E038043045
+:808880001181138134618C322881CC223E68C0114A08E01102218E48268818844C4A88832414626492A2121A44A282897318048AB41242B844822A88080000001648942442CF99054A031684C222168C1534442181141A143A18121A44A64387441644C4444224221846F5822CC042284902A0280044683624422408114281C3044AA818C8
+:80890000C0346A81B4288584F27EA9A0141883012E424B241E68492214AAC219866481CA21A14136B5127642EC8861C2434464242C82F12156868454224E242F482188A187B022382C874549A148234368442E8182888C044288208234182E1462628FC20B2211411B2170110884C14C1248C8121181000060448088844818088B242004DA
+:808980002822000012222822448828801418048218C01432428C44041F7A0224001A02001181824E811962140043210420029028222002002081280144C800001084322848220012004A228122C22482001FA10A18542313F622182CC1348D441D1249E38201844898888328E2821164162AE44148E48482D48456846F8403E9C42243A678
+:808A000042222E144F11024983384422432538248A61368144D81E2C8CD142B244981448284348F4ABD600F01222228C021A120423C98128008A41B44888120819A4241241201614588224468C4824C62449E912014C024443A2168C4A2462161024381C5249A2844B21624014D4A20E18716041236121441784871143E2841371488104EE
+:808A80001A0880332428B08C223268E08442B4240512282B25004A4204128842400462922481124A21722822312440A48282F07916206124200210542511818CA1144CC2854E1492181284A0812F4804C9048A156242A0144181A28241812212322882241C13E224210810028A41E82835144C22B1840423F1C2F260424A220241210020E9
+:808B000033822244280000284D484CC22220E843A4284A3218A8108232442601A31884028441004E8889528428208224820428424128482F81F2B347001014028B122688C228000081214E28CDA214800300508284444210488A84011A2284012011922420418404528B4884850210A8180080F46677302428433222806382599228A49878
+:808B800058C087424AB2188A2162C196840AC3B842A2242742CC222855422D284B243034484CA3212A4112C4242CC288244A8822358242A284CA31383624C1C4488B24DFF4091810024542180425A121812840C81496481611A84228490448854428848542188824A982908200B028214832114AE1C11608C0488116384250428A442402EF
+:808C0000F011D7202101002444000010042800267124210121C31422A4614186180446244804402402008D44422E445110081046982490449044102412F22CD7C022C022322828208102221280021AA8824880C68400844430288004902489044C84448862424F2104C120748204AC12E4AC425628608889041012B854F295520050414490
+:808C800015C414442022020020840290241843225284904410044148488A240400448041A4C21031810040024304422141622002F09E6640810600481410814481120883822802001848214800888A054302812848D0840200004002602442830424002C444222224404CFD20F18182001E08182440884488004288848800480840428804A
+:808D000024220210982842100800A8A8A0611002844822400822220020F814AD1052821E2848A1000041002228140000A0184800281200008100412004490281204412240280D12882C14244841A04422238F0FC6E2044840420814404184A02174418000012A8001008418860844880040084002810483241904690880080881404826554
+:808D8000088A24F299B840210221C02416814221440114402104004410044C02002800C90849821404004100908600188004484C2283424464434440F446D240081C8542012024046046A024430446644242882210021887248841901890181480422882044220088842264A2682228244424202484823A484AF1F4DC2438B41172147245C
+:808E0000114B121CA1458714267429A14455A5446681AA2C424AB3E4614323143846425A058BC648448784878A424E444E44448B22442E244E128B44844E428AA4282A7528428EF4222A222149F44A4629FC46246249B2C4F8924680018B3240813251441158421200288A04193221688A09F028482E44848120E48426B844D14844084873
+:808E80004122188D4486A84437581D876F444488B86A65AC4D444D6A8D6287A449716462824992982AF739A830312F4243B53273286465CD24282A2284A2226688D1C124E342B82454441A982449F6444C10F424224D24437924AC124D44C84F828292244B24842841414BA24F283A246B34502A2784504A4AF142844B14274A224C82D5F9
+:808F000042A44625E41F08174410011190414991411819849141184118484C9141850444400444604120810888810000188421C081C082800888804888488848884808AFDC43736757B3B5FA1233E7D21F14D588F53421979357528F83E713F2314115F451554B67BE2417569F91F178984B914AC44C2A16F4286E2F81E3C6D688F52878ED
+:808F80004F41F4A874CF48FA84C42AE246E242D244D244C3142F4AD24254677F75F9E624BE32AF22F29ADCE788EFADF52E2E2B9F6F6AF2D61AE7E4EF89FFACAC5E58CFC7F4947C246F62F15353FFE3F31736EFD6D455F129291B2387815F51F5393D13E143E251E145B574E64B7A21F139398F83A3B82B4485F84858428FA6FB12387EF879
+:809000002AF36C7C4F41F4297D4F48FAA4E54FC2D644F4646C45F424744D546FCAF6E2267F66F277776F4AF2F47E2FAEFEFABEE7ECEFEDF1EEAE6F6FF9A62E6FEBF78EAE6F69FFE6E44FC1F5283A7F8E4BB262F63566E5FD1436FFC3F375749FD5F564348F86F675349FD6A6364AB651F145414BB6EE644F57F144414F47B114B126F224D2
+:80908000244F4213F42CEEE5F83C3CC5F83C2C4F4BFA8C7DCFC4724CFC242C47444F42D644F214344F67F7EC2E4F62FEA6A66F21F926A42FE3F1AA8AAFA1D74CF81E14EF6AFA3E7EEF62FE5E166FECF836746F42F2DCD44FC6FDAF72243F16F73477EFF3F31636FFC7F73435CFC6F664749F96F664658F87A7745F14E614B454B544EB4EA7
+:80910000FE74554F56F6F4F44F49FB2424CFC6F64C4C4F44F47C6EEFC1F1AC2C4F46F67C6C4F4FFACCFD4FC4F66D6C4F46F64444CF4256447AF37C7E4FEEF2E4E67F6EFEF7F76F66FE3A1EA7A2CF8DFF4CCEEF65F56E66EFEFFF6EEEEF67F7642EEFCBFF6664CF4BFDA4EC8FE806230221B026012A01000000A048000042200442B0480279
+:80918000008B24224243222402430200240048C048248C0484244880840200CF1A0B48124722440042446220064200A02443621443881304414C02857424084882100844004180C1684AB8812202221002836482A180022324227424F16A75C0521F417228F2112487241F41324A1D24AB141D24AB9419B24A5985AB944782AF1439252F43
+:80920000147B24D812FB24481CF9244A1CF8244A16F1244A96E1A26459ACE449C24A1F49C2421F497228F291248B141F49324A1FC8F24A111D24AB9419B24A19B54A3924AB9443B2427924B842F92448984FA2F48EA4C04A1E64241ECC241E2C428CB24EC1282F44C9282F445B84ABB44782AF1419B14249D812F922482DB12E528D812E22
+:80928000D216F122CA87192E4216C1439E212CF4912C2CF491688D4217484AB19122E481F24A111B21A7441B21AF443311AB34322324B3426183297132086D585FEE050049040000004004280000000028008008800100000048200200004004280000000021F031A7808101263122812082A21828182034482A289A54608A00222088C4F1
+:809300001141100820D248A242322C1224826232458802180020110242223034802224FABE47241420238121A621992115222814928900A0828852288E4CA0422C243228802286222D2444220C28A0488CA1841A28A4242A0420088C0142228118C8A6018FE304184A2162222280024A233924462262148C822A9A74A09226C288221AE664
+:8093800024A8482E1144200611684E2C89266D26002226212C8AA414412082992218A04250842482489AC2F75012803111188C86F11128248028018628042088C848904400201208288428D80030223024284A6881E112802206004028042832182A840ACF1B0F2215044CA2161A8201218C168AA2849018842009928111814889082042DF
+:809400004468412A6148808261410026028002168421A184008218806288428608AE4A7B9190142A81C21182A18062A14CE128E33184511AC84AE3A4C822A2224B2142824988424C9248624A92622B482AA1284443248ABA84B212D424A3529AB4C8E388A486AA049DC4C28CA5284B188A810149E244034FB60541132292214A2203C018FC
+:80948000A18E1219821C31188CC482A28A2228013084884508262864842F2204448A322441A2884CE2224194428826684142BA04481088292122811424622C6FB504384C014CA181252821126247A9A24123112AAC2189841122732498418C88648240829424284CA1E13A08A0141624622848321AA252D24E882A09C2C7184A882D328466
+:809500009886088E284B1426F8FC6F202404284A3228F01622426C014662442181298802134A1892A650484886282192241E28CA2298228C62848230D8814889C8161C22847194C112984608881A2628B348032842F08819244CA12416161824C128C098C028284CA14820C21812001221A029412A1C1898124470280148458824614450E9
+:8095800024C06800224304209284284308890812460212DB2E8002301400108828020081602148144901838A01008042441802441882282100281222820042200880A114B01802E0822888086F9E052A84028B12421E282638262F84612222682B142784843AA84213A138842B124B2190A84984E281524827831E2450481AE28822228C71
+:809600003198284725824FA82582A4428A41220949A8C2F2A21EA889321862C8F078A6F08618D024413424001608161408204802A9015490888210048C04224425A82C2E82806444211044088C221201124621098C8421416481A041A882009F360942200128200284422448482184288A2502429A722228D882882831240084008668180B
+:80968000AC842228682A82830200818128202102828128829A842228F817B500224142834543688142238104411C1101001A0823241108222284292212648421291296822424414002301824223018803248818180C822801188F4348560885284008A02230228C02841420021424284810022800424814A12480883044210088410082609
+:80970000088284C638488200224842483024F01674501200181489E114421152281225470816066028200620014280E444C14420288494122088032F8401499514415084424400444212818F22918826248481F15D8E008002224A01004A08002C0100282C0200282012D2280222840080140210120200280044200222A80000882324E823
+:8097800018F17D7EA06110C8512F8104121C02272246440700AC58481844894884480C4C08440020C2218718282A842428A32849A1212800A8824444280018204902882904CE9D40CC2A0049C821C148133614284C73585381141840B288C41220013A1C4202848042C24421825042608816A22800C4414C012F486428122410883242401D
+:809800002802F08F3524228728C0220080840288008146882A88418268498C280A41224242898404008440222142B82801008182818A1214A841422A088410242824F2BFFD00C04140E1286435400936484481622183E141847838048422274181244288264484912289C361008C0158101474148A248284C4448002824044324818F0120A
+:8098800024481FAF493222A69A2A182F48F588412E613E288B448B83424810F949198F8811A2182F86F882622F85B39AC32CAD2886B422C56A66D888926C8B86248BA4A14E282CF112822AD122FA142A8C72147214ECC252CC8E888B2444122A12A22184AB93CAE24129F56415CAD477025A3288145A5681248D1E271415937249C8333738
+:80990000942F9561212CBA84A185CF68A59447488843AA43496624439262656482ACD2437522B81446A24A2A11F8681823F234144C8242A2DA4B441E884B4883A414AA94184B22AC12528490482AF86C2AD04184D78451218F17B27133531D422E2846F63A72B3D26C056123F358C42E221A52888968828B918E822E8228874447416AE462
+:8099800024018F86E228E4BC98C22744826FA92AF98894428D1889148812B8A2E482D882F184484E888E8881CAD4A8FCE242AAAEA91AB1BF4452412444148604441844404802244110044190449044100621830116146241604140044400230427149012901248211618022141100445087F364E7181F15716EFB3F33D6A3F21F2BF2DDFCA
+:809A0000D7F23C249F83F224348F88EF21F11B1815F151532F6A53EA6596662FE3FBF2B4CFCEBA24EAEEFEA2266F2AF23274CD26EF6293364F81E5A5F694B64F21F9BEA2AEB26FEBBABEBA94F8E4E4E761AF61F43D675F54F196FEEFAFFF62B22F44ED25744E7E2ABA3AEB2AFA666CEFD6F6A8284E448F4DF57CE6ED79246F65F11D3CCF14
+:809A800093F31F58DFE6F2FF3D9F96F439611F37F6A6A62F4A5E13BFB75755DF55F7A632AFEDF41696EF26FEEEAA2F6EFA6EBCCDA84F8FEE4EEE49E943F71C96EFE4F546584FA1F5574F4FCAFAEEE2CFA3F266766F63BEBEFABCE84F4FFF7E76EF62F63D67DF56D3EEFE6A6CEAF7E8F2EF65741AF868C88BB3AEAAEFC6D6CDD864F82E88E6
+:809B00008F45FD7CE42F3547D246B411E473F2392AFFF7F67363BFB7F2683ACFE6A7748FCFEF25F15A7AFF54F54D4FAFAAFBEEF84F24FD521E2FACBA96FFA6A8EEE48FAAFB86A26F22EA62F27C744FC2E6E3E627F6467FAF2CFEC2CCFEEA4F68FF82F2AFE8FA1294EFE8FA4C4CE5F476244E1A4FC8FEEAE45AECA1F29298CF4C38A88FAB99
+:809B8000FBA6A48FAFFF6E6AEFCFB3E2F6E4784BF6CF810D1F1DF71D262F53F25B189FAEF63F3FFFC6F62979DFF6F3EAAAAF8E7E41F1597B1D13AF37F5AABAEF8FCF962FE5F9C2AAEF88FEA2ACFEE48FAAFBE6E25EE6AFE7F7CA4C45ECE7F67862AFB4F5AEEC8FEBEFAFFE82F26F69FB98AE2F6DFBCEEECF81F33E3C6FC7F26C3ECFC9FFE7
+:809C0000EAE2AF8DF4D8E8CFEDFDDAD2ABC68FA3FBA6AC8FAFF9EAAE2BBBAF8AFAE4F86EB48FDC022A012E1180013C8124E2812402E081442149A2412CA24889220100A0241008830481002B82B022016941484228420886484208482C6281288242924282BFDA07000080062881122C8804842186C8A2102A08A2888688820443022A041B
+:809C80002602C828488240B828283124100480220481800842260822001D16C0421F4152281F41B248F11124AB141F41B24AD141F24A9219B24A19B54A3924AF1439242F147924D812F924481CF9244A1CF8244A16F1245A96E1A265592EDA9E24ACF591242CF5912485F2912483F49124A3F48124AB161D24AB9419B24A9945AB94478305
+:809D0000AB9443BA42792498924F8284F9244AEFC90E1CB411068C66141D28A3C428A71419F242968CF248A559F24A924B422F1479A4F84211478A27146F82E414F9265A1CF824DA8D816F2264182FA26458BC6C48BCF4812CACF491648D421F497248F2916483E448F64A121D448D1619D648BB95F44AA247838B84222F246183882B43FD
+:809D800029A8527FF60E848248100200004024C82400000000001800000040010000000000004480020080010025012FDC0B4800215281489053204CE2813488848E1200E08801008982E24402222A044008820012888281828922E3820846A842884820A448002BA52002C8DF3402B08201182832188820222282084521A44A43128202F3
+:809E00004A18040000602284802281E21132228116422492840049A882124281480022178C80A88414F0C4EB2074D208215289A2418813259284222BC340AC814A88021EA82440648328C60420820215282239282E124A8328018AE288028A32844F84A224A2484A2224042CA4E124E214884F990C00202122011002621068881448291231
+:809E80001402A048002002224224810000141028180E411A12088812428400882299088800484B88002008880080080000000000000000000000000000000000000000110010011400775E200231181285C4216228846B121C74118238828CB234A1483CB82151421A82F8854854428542A8241A047368488F82A5A400311816D148B441DD
+:809F000088021E287F128144C2846B28841AA14A29484204A89E488D25B02242D281A141894864144C12C4282F1281F491828421839154422E87116B381A782838844E45221D228D18124A2C1803188F42822814C71412896A18669C249127121AF588828423A44149239282248E148B818C223818002008200880080000000000000000F7
+:809F8000000000000000000000000000110010011400FFF4024840031C0100002302148688A84229218881841181B32504000026285182441880410400484B12008281102841228812C4140082C04815071F22D124A3128D12282AA14247824E22C38721B448011C04221E6828A28AE682A448001CA4241E224A2335244CA4242249C2E49C
+:80A00000803A248B526B1A8843B9549222D223280546D14825BC12BE4898448849644149B28902582229C1121322834604251C22D481918819280216084888622A2C0213A44216A2168B244C13CC241A42A486448810B882C2A4982E14218A31828304F04284422339844130844C41FCFF47302163C12381180026A8243A84034280C442C0
+:80A0800032AAA412A82A45299145008002122448428032148062424AB314241124249A488021C14189A1824B248C858488044AD27D4F2241B1483218C018000042322C082081681431CC4298426014228001112810012280588414144602830113214224024608284F82A814808101E084F3F22C004810A21420221301100C2283A98200C0
+:80A100008C01908211884230248800D081A28600128C8603D048248806444448AA21880400890B23622218187F8605280049021048982838964802C24C0484818A22A14800840042A8419011421882220088122832481800588D110020911200284200F07A68001128A3A21481848341889398835322488B49328908B67818A4484A48C133
+:80A18000884820051110A1245A2A0A9243E2139811284381244241041786888C28C4328F42286481B012862231486FA8062B121068412021826212200488824482D08154122281001984024C22422422410880020060248C96981A8481A214121848001812A8320020F2961D304218201208422501424B1442228911D212228421822808EE
+:80A20000882348021C0240E1618829484104200820E421222228028018A282A04100420024427F7A0F12288142248082410A2822C8298888C1822E821224421C082822001126244801184B288A3185821123F811448A124534412741193222188A820422214901008249F2F6778001001334188180352881009028800122809182108806AA
+:80A2800020242A04120020A421001200828C01A818688200880018188A8481F15D8F008014A8282830280024248901524048E4288458414212484C3842122812002100899221A113212198162220081810011828224C9142814880045F2B04868162114212211A8201124321C644424E1219E889B44988A1148021528120440286228884CF
+:80A30000C242208821A2284A51411A34C14289832F1802601182423024E8828042B17846622280A2212086641481422A18A8182C018D1228180011280011A02412174416D141A848223A24044B41492402602118748411E8D012240A109288800112481F370FC012484008102202848E14A48DA18D814810422192221411005014114004EB
+:80A38000004D814443082D42499842403424424142604880342444414884220044AF7E0E1120414801A04262818001C02122002084098A21022001124381011212121860414821A288004A48A818440025C288322028A22148E0A20784F021482094481088A1122C542880028308266E281880716A14A19428C82B52482904601821688CF4
+:80A40000948248002180210212444AA134148218248301002382F285A3241E22928B122A5421A9E7A2E2110483F1241C4AD22872DAF2313B2D91A6F254812B9A6E52221B128D2421493242472219E161A2884C18E221F18244445F48E944B984E844E724B414FE819627427E144F4A3A9829D14408AEA1B02E4894828D9820E2157442F413
+:80A480002E9F90127011E985D28824A6443B168F23A454E83E122B49118A3CB11ED8AFEAA241927D112719FA7949E11A041B71482EC12D511E531A84AE924F88EE2196221F41E129B81731824322C4EA2B112A8BA81C13F411524BA8CA7234F25844A23A042A91648F4F0217142E3228815E2184128D284E382E288725ADC84F84C998A3EC
+:80A50000F44828A384C12329A88D4A48E18AE224A84246F172214B1C574553A8B8825F11A2174671B8C2232186A5165E214BB197188B441734FAF211622BC942221E5229F124184A84AB858AA2129F150E11100184211042180200144834400110045181450245021502241004101114111411121152812111211221504212002001002FDF
+:80A580009B4DF3212337A1BF12F211319F364212D839F3637B6E7A8F2CD922135A33BF9111F321226F62F813113F3ABAE2FA6184EEE45F7EF482815F52F657753F76FCD643475C6F71F146C64F4BBAC27C74F575667565512E211F26F253136E472F7AFAE1B27F66D2ADF153631F75F4C3C29E822B57EFE4F4A2B26FC4F148885AA7CFFAD0
+:80A60000FE24426FB34ED231D113F421291E799FB5E581F17A5ABFB6F67B332E22CFAEF8E2FACB768D8A8F88E818F8D1DB7FF6F4A2E27F79FDE6263F57E14EFCF4766F7CFEA3F31F15F466E62F6CE774F5C4C54F56FEA6346F18F3E1E9EE633F2EBF33F2B1A17E773F68F8E3C23F7FFED2F37F79F2EA5F2F2EFEE3F73DC23F31B872F74ACD
+:80A68000EA4F2AFA7C6C8F82EA2EBE72A4476F23F7B4C8243F32F23262B5F111119F96F272785E122B24BF96F66A682FEDDD22F39AAA1F3CF59B13AF37FF28BAFF76FDD6967F7EFBF7F53BD6DF13FF21534D873F12EE25F761474F1DF4C6455751DEC3BAFA46444FC7FD44C77F69FC97862F6BFBE4A77F4FFB51462D844F75F86A388D9F0A
+:80A700003F15F7D1F33B54DABDF2FD5C5E6F6EFF4E1C8F84A8752BCEBAFB2412FFCD4BF221333B239F92F258399F97F732388F87F5383A9F17B732F5FADEAF2AFBDAFA5ED3AF89F93B38BFAEFF7E565F7FFF53D33F1FF77351DF1BFD24742F14FE31E14F65F4F5353F5DFF56D54F7DBDF2BFB2B397F3F4F51F6FF7B6766F3BF2B2A77F67C1
+:80A78000F7B636FE572F7EFFD1D27F69F3E9DA2F26FE45F33F24F5D1D16F4FFF5CFC4F6EFF7C7C8F83ABBB2B8AFED24B723F1B0B2A0121204288E18144E18144E28944820417892C124126282488228802421842514288424929A412A092F02481F02481481C08221A049224482CA2418922091228F01383602812A1281848C02880220252
+:80A800006089460242B6082A84014A410819A424224219290128B0418208256141632401928B86441C292884044198604422A048C0415D7BC0521F4152281F4132481FC1326A1D24AB141D2CAB9619B24A19F54A914B42AF1439242F147B24D852F924488D954FA2E454FA244A16F5244A9E252E4A96C54A9E242E4A1F49C2421F49522833
+:80A880001F4932481F49364A1F48B24AD1C1B66AB911B24A19B54A3934ABB443B242F9344829F92448984FAAF49941C04A1F4156281F4126F4112C8354414AF1812C8F4411F14AB441AF14BB24F44A91412F1469822D912F82949829C5912E881E818C24E98264599CE449C24B17C9ACB49156281B69811F49324A1B28A9D1C1F2429417F1
+:80A9000081AF441AB54A2BB14A79249812478329F9264829E9A8B58304000000200282400428000000002180018800004001008004000000400428200100008121F04CEF0022802102284602288C081B142B84608246327119826A581B421A0449B2235481D018A2241828B6084A3222188492824B41200148882212881008A2122908AEF1
+:80A9800018184AF2E528E024B2848121C2421E221485E181F282114A018219614810C8828E584E11528841682308902A00178449C84220A9182AA821431231222128632AA84352C8811E81882A28216886238E4401FF960E4E22560412482C233248A128C9041F2229BD848242E225BAA8B411FC8146CA9254122B283B288181850115F8D1
+:80AA000081248B69B0282CA2248CC274344E32806348C84B69222A25983182A28A4262822DE24EB81823F7CD4800281828260214112E121389094211403848111C218211012A4484443122282A2405102291929218828844002302A041888488842081A9480000BF360B2400280049410800122182241260820090418044914114A0212055
+:80AA8000C11280242402271220242982324213A89282244301003288AA84290A708E0928186F2291188363228CA63462278A228CC851844B491DAC602919EB1A21B724611887122844688594481F82C424C84E24282E141B8449C1884D128B82432218E419B228944113832CD881AC422A35844A12A44249E4443A245F480424100218242A
+:80AB00002E481222238232981C0186140A831141013E44822E411C5214224100222002284092214D1246684A1024C9A819A1928869D88128A642824A9224C2412AC8249E732082B114D282C3282849E184829488002934881AB4A5012AB882A3387814148420C441848B529396149AD442A4424B411BC249C188A082122A88B24332416A3E
+:80AB80004821848104184323A8842A216E44F0BDF90060C5843283AA21CA0210011614884422EE242221022180081CC1488B840088912AE581422164A280044A884A913112860400248938844A22018C3222A28BC1FF7E438104421C2304848741282E8884844C882931888444E210B14209224B4289034C691A42161141823C448284A0CC
+:80AC0000482A01202328C21412601248205741421282292881F3DCF330120021808924D88204380011901412855181421284480000225289026844A02128111A9835800248A97444028384C8824112841422684304004544A31450482F122196188CF7244284898A021A98981847882F8659689E284A223198488A028094289E614AC28160
+:80AC8000814931882E514217221845818288E82522F1241240088611D48228E344A24178E8A2828B248F13090018841828608162D0184108114212B0216414408104E04472211898544028A1424AB22245A48280A829186822118F168884A941883042128F44082850488023D8D30E60888021C34184122A849448AC8221C9C8C02181224F
+:80AD0000263181394291228219460188914E9898822184329C9221348C42248484C26142624448824921220148222098421F3A0A4842808244024210C222B04828042C24444262A400003127814222840048100100301280C31230419084E0228408C84A0942828800886F1508208941081A22120821120020A182812A98891480240A00C2
+:80AD800000184E21402822822106001A04A02100320018838502228A01802684FAAADD00100115085828801233422004800A48800190482220924800144021842A91888042242892829082114498001A18248122828108846FF30248442890281924840281228A010022800416082248828004888188848018810100160142008880888C70
+:80AE00000181812008928001F034490012A0124A01914A81420290848884844E812419EA6428230C8D11230430481B281628860AC22814282E428213521886882482828422842C882222820C1A2A3622F014E5001410012400294181454282111231122224221304178890812D224E8A262281126181460114401101218A2125083C8111AB
+:80AE800002C042435428002C0400421F960430828942888801218184888AE224018888004A81088828C24A022860228A25C22222888024042289342882121812280000845A0818130227414E11F0A3DF40085800A219422824024C042816321D201C28A184304A1902908800B082014E1128881518C2485014481119228848C184823812DE
+:80AF000000882001B02208EF910E4E4286882183A2E22B63812396433AED24F892425AE981E51BB222A1448AF527282A2CA6E21B8D2E228B542E62A03317381E596E889A14A198526E811C62224F11E286EE1423ACE89A292D0A4AA89CEBC382AA28B68168224B828E21486F9F0CE049311885283B11116AD628D1A8022B284D1829C482C1
+:80AF8000D5E888E6A868B68F1D3D418A1E0819582293E42246A9E383E621A3A62A8EF221738912E818914953A1811A87E11294E3E84AAA48E0CCA34621923A27A9712E11CAF821FF0019B42192319F84E5347148EB818126F2432A2E584A28388A2CFC41812A92AB242F191173C1F92A6B2F1CB4214278C8B888F84A181BA88308271C1734
+:80B0000083508117223B2127C68B188F28B423681239E25231429E561AF11848B01CAB31D842292BA4C4A9F2C3A8001C41480100241E48140040020000000000100211421100004222200243824423612248228A14022584148294220012F0BBC64052571AD119E42EF26323BF34B642A623BF17F3BEB28F23F382822F28F95A184FE4B324
+:80B0800032EB22F273F16FE4B482E51AF621A98FB37C2272617121E122F8715B2F23F3B2318FA1F1A2A21AF359518EA22559B92BDB8B159F8BF189C92D412B541F3EFC83A329E821CD525E182E22AFA1F24242211F28FFC2D24F46A6542BC41F34044E426FC41418E824F35332B7342181AB15AF6DF91A122F42AA98DEB84FE4B332EB2A19
+:80B10000F27BB9E5FE92922F12F669A98FA1F482C21F1AFD61432F26FC715BAFBBF3B2B18FB1F2C2225E511F85F581822F1454B92B888F85F119D89F95E11AA3541F1CEC4CE924F4F2B22CF9D89A2F2CF88A886AAE841F28FCD2D26F46A5DEDAFDB46BE024F417451AF139193AF2797ABF25F75A782B67BF96F2F2D62F26F682A22F21B860
+:80B1800042FC44742FA7DBA2F852DA6FE6FEB2712B6A8F9AFE29D9AE813B861B422CE42DFDD2E22B798F31FF82E21AF7F1F9CEF22B628D2B2BBBEF85F3ED389F9EFFE3E13BBD1F3FFA93A62BFFDABFC2F5C81A2B62CFC5A6662E222BF6EAFDA684BAADD8C6094E42FF517419F939391F1DF5597ABF249462AF87F569293F3DF992926BF52D
+:80B200002DD22BD74F5EFF32BA2FAAFA5AF8EFF2FED3912B648F9EFE285A2F2CFC71C235F2E24A8FADFDFAFA2F1DEF25FFC2221BFF1BFF1F2EFE22619FB2B2B3FB78389F8F7FC9FBB3B33F27FB73A22BBF7E722BBD2B918F8DE927F75AFA2BEE4E922BEEEAFE3614BAA9D8CF7C05002A014028C248221A64228608009E4824842813A8244E
+:80B280001142A02411288082A824188028044001148C848984A84800A04140088A0448004282FF360B481214E016D181921280311180A414124A38312C82F44A821220885221880048D08125E882044819828822024302223042282F12A14920084B4388A218B2422A8408AF92042CF511248D121F4132481F41324A1D24AB141D64AB9492
+:80B3000019B24A5985AB9443F24A9143F2429147822D914F82C4914FA2D418F8244A16F1244AD6F1214A96C54A9E24ACF4D1242E421F49F228821F49B26CF19124A3F48164AB161D24AB961B68AB9459B44A3924AF44B924B442F9244829FB244889F9244A1FEC0149D581D622F5112483F41124A7241D2446D241F648141D242BB45D289B
+:80B38000AF2439248F5439342F1469822D856F82D418F926521CF824DA87114BC2D6F1224896D4B2E449D2B2F5C12C2AF4914CAF227C91B46C789114EA48366A15F42A941F49943859B64829F248944B42984D48B86F82D448D826F595330082000000000080020000009022800100000000008001000000842200000000002501ED982470
+:80B400000026A8218426488864411284002341028CA242871123229C18984A4A28126184A0212892841E8482221028216445428A6212122182181A0C3243A48482B28458AA61828FBF0112B200482B84121A42084AA214890442A28E1130248822480000A021161808682B28260A4416A221235824861128210D1C3248894891C8E01108A8
+:80B480004E1820224AA1487F4E04A02D843246E8882481751884B1242461A6802478B88146398266321888F28182B028C41884221F2946C8AC8908522D288A61443749421AA818245382B82839818988E318246484B8244A49A1C13F21022901224082128802108804122422004C2382888401204281012A01A0282C0143022C01801488C3
+:80B50000621612C048A04142C0148298902822B826F8FDD80000100800000018304800201404800100142200004028011902162404000081000000000000482F3A0220021C0212005220098B84A08122132922490268209221488044219481802204301400601248A04114292882091A049828C200436641F0AF150000191208000098C093
+:80B5800098200C1C09CA4114228621C22142142811421C082842001C034C219421488011118A22014200200890444C011FA30420020012004A010042608122200200000000480000108801410000004820088220011A8882048002422F180F2001001242001800800182000000200222000020220200400122180000008001302C00A0148E
+:80B600002200BF590E00288122260318814A482824044181841A264284242204848004204502422220288202002CDA140436A22800008812000082A0824FF40F14004112810012001218000000521888001140840141008004000081830618004812008200421002201AF8382E0012102863824820A1C1202101448280034CA11488482818
+:80B6800081288001430580820400260189E283A4284C012602180088604142248025826A8AAD6C4001224430112112811088242401848148284820024001460400302242228088020040924120A186001220982800008200EFB9010000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000046
+:80B70000000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F24
+:80B780000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFDE
+:80B80000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000069
+:80B8800000FFE40F00002200008800000000000000000088000041000000000000008200000000005EC28001003048000000B04821918840088800000024602240280128484C428208250400002200000082A0840020F83D22400125418202160240081E42101211418498241826080010480840241222040044124031488055141A0889C3
+:80B9000008C24160680021898288046FE70D19410280220400842011A21416918840188408000040082602221848224240A6811002004418228908C24410240829280220F816F400400121842C0100804442081144822812890200400821101418020043020045C148A04114820000002C088014282804BDDC4002212866410810882206A7
+:80B9800081200442844A618228000090288442489014822021024084114121382882462201482089128401444382089FE24401121E23812148D0820181982210889891B044011290411A8A4222041324C821493448661C1434844B811082321246F446121E4612284A880443044C25282C228401889F9E0F801132224248200126280A813C
+:80BA000084821321044088220400409848C02143044648941449C8141046223141C8362288048014842921A841904418005B1240021C43CA218424848420250220840847854A8103119A8202292412A14842F01448490A808208A01211412D146D4818222BC14280042E444188223024882CF8B9C10022141A344821282006902826044078
+:80BA80007424B848A112481229068141142283442102342082B12174482402228B42622541981496048227128081028024912281127F5A095082802402840078490822008C010024226112428081A912002814124885212104281024410A4A420412108432122800B0820442DFE94C810100402881410187110029648400408102000020E5
+:80BB000004008C2112040000142304208108200260A4804CC4382281121A14F86DE4002342018952828C2321A2141181244289D44891281A64116823E24482114844A1412608228B122849A12414134184D221223264621825E8428488225912AC84A2B4418B122283A1E18CD128F4B7DF800120210400468192982800004484288001809A
+:80BB80000480824501400220A142002044C8121588288101284024112202480042F0814600000014F022484210280400191341080022408184021210512800890141282002000048542161A0242445781262485084848242FF21412244022384018110020000008005002002110000408482050012144AE1110254542141400428144112D0
+:80BC00008800224B182A21F2D9A7A0122301188C022C12110842000014810014001C011021028001271141501410145441814508288303128011544248400444121A8804CF2402C021C0224262009028504842000022202201400184200200C02118180048301112001111214C0211122880A11422222221411F630D236822008C6412A0FB
+:80BC800012A0120080014904196682121304844008111B241045C8444088420414448504471400260450144120514821414C4804441CF2341F00110010084262004E11802204892411012072111218E1818808000048411C812102142241C01125C411250340210100425820C222D0710A480012180000480028200228201188611421A031
+:80BD00001420042224468422016012180024382189044818001AC421441248802218147284F2FB17302100206281178620222404114211621942814201120084142814284414458802801101003998188120011431124684146224A04900430DEF4E0FA4C04215024200A1814064441C020000124810021848C810014812541944C4284426
+:80BD80004818440043E4540240A4144A021242492201230121218F18081E42335A222C24C4214682A14426084A0420467128C838264181E11152215081850178144144255844D054B111732444C44549D24E72422152C6283542F242142CD154D62422F1A6544C253C2E813CC8A21F3344722241012B1129B73884F24229AF82B248810475
+:80BE000026011453734131513813A1412A6411118F14F491282A14A1221761CD434D6158859C21B011015352B81B1985F44516321F2461413362115744724E44C52E24D944A5113E944B5843F6B84DA0242C0313723878417828E92204684698194E4419054A86E21244C83846018C4309484E2126011446E843A1271E511247422815A17F
+:80BE8000111F430159D198F441214F51C41110E51194111AB142612163A4A34CBA84E24752423F5A4B0114002082E4220118481C011C0138190413011142001142115211121142001440011440C348344826023448800448248A041008F0FC51F023223D2B211F3114D818F219538D6AAF86F258785AB54134615E115A83D34CF528183A2E
+:80BF0000F318181E11222A528A85D988E311A3922A52646F61D1CCF11454CFC7F7141447414FC4A2335F53A7132B9B4F43F32D272352252B322AE24151114F2152464D14AFA2BA12F924266D944D144F45E54EFED86CF023223FB656223F31F5685887129F33F53A5AAF87B368F65C5C9F81F1513446A1156AF56C548F92F2292987811F91
+:80BF8000317163F12828BF917148F8A8B81F17E312F331314F71F1471F6FD3F27474CFC7F71C1C57515D6D1B333AF71D1CFFDBFB3534CFE3B713F115462F63F323213B335D454F65F646144D16CFE2FF46D44F2FB292F936344F47F7D6D4AF914BF323221F32561317315AF449619F35F51272AF86F268688FC1F519591B6415A1151AF27E
+:80C000005C4C8F96F731318F91E115B572F721318D188D498F92EE12E317F621211E173F71F14C5D8FC3F57C7C157924F431551B115F51F138183F5AF94946BF71F156366F267213F511133B7555F414466F21F45E1AEF8FBB92FD2466EF41983E4B554F64F529A5143F26F62B63357353E387F269219F37F76262AF86F238388F8454997B
+:80C080005B441F1121A467CFD7F638399F93F319191F11F173719FB2D399F149491F97FE61717E611F1242F3475F6FC7F66C5CCFC7F7151D5F53F23D355F417155F51D1E7F7AFB4B4AFFF5F577767F76F713133F11B153F745545F77F54616AFA4F5FEFE4F4DFDC432EF49DB4CE226FAC4965FD30900001884228422846081200112400843
+:80C10000120028100880818201184249012290148001181200002041022001822021043F22078A9121008006B0420118484200481C22122881118142482182024012082800140040C12820D112215112101201481890822A941822421CF4519FC0421F41F228131F41326A1F41726AD241F24A111D24AB9419B64A19B54A3925AF143B245B
+:80C180002F147924D812FB24481CF9254A1CF8244A16F1244A96E1A26459ACE449C24A1F49C2431F4952281F497248F19124A7241F48F24A131D2CAF249921AF2419B54AB924F44AB243BA42F92448A9F92448984FA2F4ACC450A24C762AF21144A3C624AF26D141B248D141D24AC92CABB449B24A19D1427B25F8428157822F145B861C19
+:80C20000FA275A4AF8259A5E8157A296F1254A871D45FB98252E4A86DCB4F491648D4396744CF1112C4F12E888F42E111D6CAF467911D41A9B45AF448BD44AD984F442142E48AD942F82C4142D582F83028400008400000000000000000018800800000000000000000044000000000000DB818022210118121019984148008C5414118469
+:80C28000188008138492412842109824108C92242B14511A7421C22424424121AC44812B28111125012118868212AC4960826E3DC041237822084551217460112B821331212F316418007A081A02848B8381846924D218014602582384118454424410D4680A1642F4882446D538A24A8502C7244B16668A2A12AC244187588AF44933A015
+:80C3000042569228C01416131461212A7414613272191445B13888218158286222567142249A11C042D084954149F14214C149F5412228644B424522C14459DA41CF88322614F1481443952A8A825A424FA2A48543A841DFB30834800114404358181328043486082004280017898184284881844C023022283041214441D028082484A1C4
+:80C3800060328A543841242246220126084181A6F842F60000122411240080014A8104450813081381028111541312984128844448874180A282440025014116080048904100303481B0482102487FD20B422912322283A541815A92581A28D4825422802D39888CA28129E8C1E41C82048E28482B42C0181A344A892AB4448848A4214932
+:80C400003288C2871140E241EC6B1401101A8D9C4C8243EE4894848E44448CFA682B0022A0218B1423012180A11400A08486088E29983969432E4140C12448C041382C258484644C2841384488111830186B1462314800416084E084088449042AF4EF6CC0422410021C14A861568848C24A4A31421249918800904888890487183CB2286F
+:80C48000048181C48E288D1420884A2412B842184904888E1400D08344291C94B44392C45E842A18C48896064260218081C2244C224288925847222C24048A4144F11224102244A9281C83C5144393382A28C2781621A516563A11004110084004B028448C240180880152E02B0624263241226608A43489344411F02844842022648116CC
+:80C5000008182912110418A221001412448712118887428AC241C088842D2184164604926128230262822384082223F1D3EA0012848140814428611212139282008A018042A842C014C8424085140356488808000041269422924A01308184C08100A8C3111238484A4138A83FFC0C24249991288346B14C523826D849021E29A51218A290
+:80C58000828A6181364A8886C245CB84CA82E236A11467138B211F83C818AAC11813853334294A3124A283A94240C481811259042288CD1282A99CC84AE18192A84F4202481A42021828244CA214482E11484A882424211444313418801101114441004222874422800C1C4144424C7211182811022C6888858684A342001820042F24082C
+:80C600004821100A0000830148708A028014180490128185C1881189548481430811418440241854144450414410848181C254800149818801184308CF49020084242C460416022C0612100483012022250124481C4428E212B42264122B4820311429819411825021588B141A24813885908100490C882426028184F035F30040210222A9
+:80C680000010C88400104184882204205A18138A22E28214C18142450182904C1014014241418C04114211421880080041E0420481CFDE0D1428008C1278424B68246084814B24A8830810342452A0149824D02244012A54C2222F884421241802588281110048001081820C8A0524C0821084F8A15FA0282221222144A021A049A02188A1
+:80C70000C1863814820000B30222481782804388C745498148140448411100466141C121138441C844A64414C412C034418BC28C42F9FACC80042C0442800429042B8429DC220400837488A44800907212192181484251298481182480E4888104930881001112484C91821820014C45A82818007F9F072410184808814200844411584042
+:80C78000480412A0584286028C0114008800C9C4488A210188416015122158D228218A8462241A84242E88088008FF7E058004002210480811828410024428818608136816202208848890884908110015044248441008004A02C02480184404160812F03C4F40488226411148224403400C782800002004218418803852901290128714BF
+:80C80000002F8801198588180810C454400528004448C08243821882F8765B002F2812D12262A22285E825521A2C581229B24938582902C9A8224C2B2144C8A1A7859D2115817448B64AF2A9AA257D847CD4F8444267414AEC14C1844F48543144571484446B585CE214B2C443B444B31645A45A8AD186C834A9DA14B188F85587A064626A
+:80C88000856A824641344181B0287488AC8D69D6264818684888428E481AE111F818181968888B2585D811C2494511A4948D94818A9814D18288CF84F844481E14653414441B4519159816AAC884124D8467442CA3828664CAF0D9155021302283916ACD2A2CD482E524F452184ADC8845E2C8B589F8141C4A54CCCB424AC1C23B7E1F2E76
+:80C90000E412F26242A6F863212F83F5A1822F45F5E9C2A71148DCC15A23E149F8151115A1481F11D188B458B548F551818A31121DC15ACC44C24BDC522C684BE3E887958884AF180C1304111031221118158811815181188041C834000010682881B01882381800000000002184213022302212211221902292200192F0EBAE141553B3B9
+:80C98000A5F21233EF54D65F724AF232632731BF34B1DBFD7161171BC5F61939124B89CBCE8F47A591DED287837E71FECB2FBEFE4B4B1F17F773432FAEFD2A3BFF33DE4EF594CCCFF9F956D66F45F5551547414F58584CFF75715B7B4EF67664DFFEFFC3D23F32F38BCD4D166F687846F646444F64FDCACA6D966F4CF424344FC8D8A8F83A
+:80CA0000A5CAE026F6434BB5F3123BEF54D457523B2FB3F242513F3CF9DFD48F23FEC2F47F71F59A1843B184A9EC8B9D1AA9DDBF82FA6169FEF89F1EFEE9EB1F97F75263AFBDF4E27FFF7EFFCE55CFC9FC989E2F85FD56545F49FD95144758CF44F45F57BF95D1C4F16476FFFEFFC39446F1C8CA6F64F44624CAB9C4FD4442EFA4F4A2A2BC
+:80CA80006F265E46CFC8F818989F4C07242B629FB2B212F34D668F24F6494B2F22F34B4ABF29F88ADD6E388F8CF2DC94DD954F48F9CCC88B9B8B461AA9DDAF9FEF1FFF68788F82E6A2FC71212F26B5EAF4BA6EAF67F64251CFC1F1DCDE6FE9F9D2545F51F511915F48F8494E5F55B15AF548585E56AFC4EC44F9E1B19FBDBF46B194FD5446
+:80CB0000844F69B9E2FFD8DA6F62FBDEDC6F8CF59C188D18FFD20A1F36F629638FA2E2A1F36D4E1FB6F6484A6E7ABFA4F49B8AAF5DFC68F2FFBCFC8FCFEF49F88C98CF8CFCBCB88F4EA8D5DAFC28E98F9AFEA9F99FBEFE6AE38F96F76373BFBEF4FB673F7CED4CFD585C8FEDFDC6D62F4DF595941F49F981859FF4FC55543FA5D5CA81F590
+:80CB8000DDCF3F3DF9F3B19F8DFD54562F2FFD56844F2DF97674CFE5F53616CF8FFD565CCFC1F188988FF40E001410C4488004402308008480048A04824A028B2420048384A82400884200880048188C44220140A248A04900200800F048F5601A2042488146417842232854812449C481C084A2852421048901882281807222224818C820
+:80CC0000428218122018082522018A240429080021482D822242806A985F8D0C2CF4112485F2112487261F41324A1D24AB161D24AB9419B24A19B54A3924AF1439242F547B24D812F924488D914FAAD418F8264A87116FA2F498252ECA96C54A9E24ACF491242CF4912485F2912483F49124A3F4812CAB141D24AB9419B24A19B54A39248B
+:80CC8000AB9443BA427B2498924F8A84F9A44A8FD201941E64AD414CF26A111E24A716442716CCF26E81282F34DA85B24838242F1458842F547A24F84A935782AD915F2A55185FA29D885D428D255FA26C584D4B9E214D4A1F89D2A4F49164CD431B29C7349E24C7341FC8F244121D288F7669418F347A11F848A6228D944B492F44A24338
+:80CD00002D846B4B25F4A458CF260B84000000000014000000000021800118000040010080040000004004280000000021F07C4F6022004303842881248C621494258201611748468861828318048C942C00138614082124831454218815480122856421876284821048698541428608C8888604F05C8B3044A6214241224324946D828CC0
+:80CD80008821CC8C18282438190219249289102134418186815441863844443C98A422412624430C3D444A7114315813874914A11430141A761A420446D984D4EC084E2413063641828142E882B482924D85239E161269D22498781393288AC4249C785298258A147141C8418314D181483448871819B8424A9821C024812D158B21E5F198
+:80CE0000448811835384941A2494884AF142824D824C18F814484FBA03242042048C1284541484881260880014005018001008422282401422144634265014442A411884344612181A8618A11441301428160820044F5F0326022712306811A3828661888042318181484604852462448032814200224A02824981824404110014E0244106
+:80CE8000D82A21818184A848348244602420348480F41D9430421483712A92158CD46184D168C2613C22492A3411242823288334384A22312886641449B712C4141CB46C8136884BA1581D241A7226F128824C933713A28243B22408254258428698482E12174243884484128CF89BF8A042111D38285F841179212C127C8281A22115924D
+:80CF0000411941A224B02C21E4460190A144114582A24313A42D90284B841A44E1129125841431482998221E8410D282388484AB846C02869442412A4888D8190E254202252A229442298533683482818884484429082284683884C8485A22150485B42485A821412644028E221E244CC3318CD2489122184830428601124D214220144439
+:80CF80002474490A482044314251B0467332184811614323012937842E132A1132518D2210C4986D81812171D0A5E811964821818E42421F8162311E421C71A85418293E44441CC218E810182298821886280429F117C51092421E2183830248904143243828471A48128881002844231465144A918830648A0110C8841CC1214446180471
+:80D0000044A6A4412312A1212504482290822822168806887012F227439014288440084902001212814008008118224008284A62411884804124E1C2041218208202001022E2242158C246088A2124022391181E48812FAF082F4491228CC3192D28544C86B238D44864188B1287112321B162C18C3CC2182259A624156414CE287D688D34
+:80D0800016667497084718C3E441781A64124B412941C4124D328E3541AD221C784222A2122B856D88891482A3842B183A24213D1885F272B50040812204241E44250118118848818220C122121884814100800130182B1283A44280088F12912142B0681921E6410219148804869882228902A94828046F5A0A2D22811439C422C0220004
+:80D10000698881E3210824224B82374490185608828D2168484129C1C122282144C144444479082D28414413984246DC82081FA438848C12245862684604C450485FFC064021010046081212888128460400184220E21402002E881848418624894281041518A81200315048CC02484821422C0142C0888429048684F47FE220C422C9120C
+:80D180003444517022041114001216288184088880511C4842124241487C146444C0141126242141048CE3421448043481904841301400800828F02BD4C02856049028280048406841902288411218122A61328412218814262222018CC4189E41111215B889E248240910AA24A0240011B0225828200222A0422432CC0D8A011825C8421B
+:80D20000846081422944C2880018CC0248B24964188B4220112C14DC14B78431428A22848164181824114C41218845F221488388084821202975248282342844812AF896DE2490111447228016022188218004A542D1222492421C0214E880410270228841A4289C02402A84C462267C221108106244444110012470842838844841F08C8C
+:80D28000810000148444478244008424848444D041130110089021001188148811000020814421C1142412121623A18592121602290824478112301285F4214F80C44281101649242361520044844489018283621C00830110B848413828A44287581028012230424424B031041260A18413418D0100294A8C6284F08EBD402212140842FC
+:80D3000048812064182748981E24281100118418122B2446D88131212A0824131108D411C48C728184041C11D8214214C18485D14308C912928C41C84E1418228CB822A8C1FF3608246F991153414F86D683344638211DC5A7288A38CA18EB194931C22F41B87881F8282989A336228CD2387434B2C4F511A92F94E44218FA14AC4B44CFB8
+:80D38000486131CF424AE6219419AF58F21C212FC2BA62758CC4122F88E82C7944C4344F686129228AF9F22298CF8AD228A14B9FED043A9641CD27ED28218D218B22E5E42531D616911A4C7118C828A5ED51D6119162414A31321ECA5E61422AE21425E26EB184E214230F165111221E114F11B945F334284F82B122F41451281FA7BDC5CF
+:80D40000FC58125D413F2961312B814AFD8664224DCC4E284CE4CCD244BB944632426E221E183C54684746EC648348281D8836E821DA4644B631F22412EAC4819F9FB711F84149D35889CF18F451888D2C2FF1924C1F61F98E485DEC8955C9125D2417AC33CA8425771162E49724D51D529A19548A8D48F78A85584624EFE49618C74A4240
+:80D480004B828784EFB50220024150246022502412A04124126C1241120141301410053901001901188001290125011C010014000000001A5418128112F0D9CA242F24F4131BDFB3F32226FF12D659B24AD44832125F525A3985F23AD88F81B11AB338F15255AAFBC2788E294F5BFF74443E384FC352448FE2F354594FE6B7A6D22AF24409
+:80D500002F2F46F424248FC4F49D941F62F275355F79F11564C763EF7BF96A68FFB7F61317FF61D1AAF11B5BBFF7F447D7EF81D966F146C26F67F9BE964F6BFB6C74CF43F764E44F44FC2DDE241E323F36F23B32211F12F623212B466D342B157F72FE83872729AF41FF1A182F81F132243F15F5E2A13F9FEF9BFABCFDEFD7F77C5D8F9245
+:80D580005319CFE2FA51574FE7F5D61EAFE1F1C5CFEFDEFE7C7CCFC4F4848D4F62F2B5675F79F115278763AF7AFA6E6EFFF3F73F3FFF7BF75AD6AF35F55BFBFFE5F91FBEEFE8F1C6D66F67BBF2BFACFF6C78EFC3F768E8EF86E62F4BF262421F33F4392B3F32F22B691F32F24F4D4F66F716547F76F38B9F2CF95AF88FA5B11AF138136FDD
+:80D6000014E73EFBCB794FCEF3F9F93F9EFF75756E5997968FF2FA16595FF7F636B4EF71F88E8FAFD6F468648FC5F5919C1F62F232D51F38B117F32D2E7F7BFB4F4CFFF5F61237BF61FB8B1EBFB9F5DB6B7FB5FD1E9A6D1A6F2DF4E6E66FEFF9C4B6CF47F7EE6C4FCFFF6CBCCF22084E223F32F63F2395FF6D6BBFF6F26F4FEFE6F7565443
+:80D680006F76F78B9BAFA9F95ED2EFA4F11A1AFF33F353732F3FFBFBF95FDFFFF9F94FDFEF13F72849D7D2DFF2F273577FF7F5B79FBFF9F8DF5FEFCFF77C7CCFC5F595955F63F3B7B73F79F11737BFB3F3BFBF5FC7F71F3FFFD1F39DB7BF3DFD92139FBDFD5FDEDFE3D9EEF9D6D66F2EFEF4D27FEBFFFA78CF8CF6FCFACFCEF249A500505A
+:80D700001484438224020014000040A448A048288242A024101831488092920080011C0824800124482486488144234102202804003F2C0B8A8502280042A01496049098D04821032289034E15225C0144481E244342C59228A0211021321100898112B81102288B94841812218242A2872422818A84C2482FF3024F22F41124C5F211243D
+:80D78000C3F41124A3D641B24EF11124AB961B21AB9453B94A39A4AF543B242F547924D812F934481CF9A44A1CF8244A16F1245A96E1A26459ACE549C2DA1F49C2521F49D228F191248B841F49F24A111F48B24AD9C1B24A9921AB9453B84A3924AB9443B24AF92448A9F93448984FA2F46B65F0224A19965A1B21A7341E28E72617C1AFA7
+:80D8000026B111F26A8617818F64BA95764A32A1AF343B112F147B24D81AB936D41AF8A5528D115F22CC816F8261197FA27588F524138F58D224D9C1D2A4FD8164ED1213F94E9186D83ED941B246D9C1F24A951D242BB457882F447324F84A94322F64A8432D842B434CF8225ABFA30646084818000000000000400800100240040000404D
+:80D8800001400800000000400428001008005012F0F4A4C041400C8C344C8CE2414281A8A133C158942B48582352822B48ADA42788264C044C8412B112C2218A94148D5425E244A22112C0144CC27C2C91288B244CC1128E4828601186D822384418206188784148EF7A4C52241B28135384195312165318624912228AD8425128814E81D6
+:80D900004C313114430748483449C4182C34544137222AC8181A3845A243C82814883782C84F18F14822471C20018924A1412AE8463846E384D148F838C185F4FB54244635634D29C9747142ED82D185034D224B1227127E825D1AC81AF423828761197C8BE2AE41344452518E44BCA1614D714C9C11AF44D3A2C1255922E3C478386412F5
+:80D98000CB25A9726238B5C14DD3C3282292188E124E92624F228D344616BA8875946941ADC2008001814834601682889281502884428033244426082034224002244C8208D852880044881381C8486E122024011914084C0844168838244AC2483F250249044100008C0212241E283440241102003014508142415484168465482C25A1C3
+:80DA000082174100004D81402311028503818285321430240089528442F099FC50124531232815B81994844887714EA88F190230118611E8C27598E588743B34944211A286954A122D158F241AA4126962424905572126126C412B164E184C94414B691A82A11423C4484C48B86C18C23E6496843A1C8CF89D6B7041044D2128818D114382
+:80DA8000886681CAC198320044833116824844414905143C441C545A560E9AB22284A2C111182881E018024429818BC11921814092182E882836584227412E888981F891152440071021048155322819124AD112C181C0681D1C89B82B810911833A84421981216A45444721433124495114254294146B4189954146D14224024A31428BEF
+:80DB000084861C64446141608A414314F83D9D0010210248235182282E5C2814413125D414021D284100212A6432981912684540041C82216122901A1D1414816B282813C41166486425A0144423216924222422002F81F47DB250414B1410684325491835586038124B424969812C011098221AB28244044A0152252282D2412851842704
+:80DB800012181283042E84688490144845420C8449A214888118C219341489342429F187BF20820290411849020081892609A084560412204848112412263228A014296184284031C12052221216214842188129E22811082628164838234A08001F2C0F4D2149028076421B5C428B1466D4217221A84147314781CE221E4485512C2832FC
+:80DC00008968424932E22D253AF41668214E246D11844FA1A2211C73418231247728721E898AC24616F149268E1826E228911C522F812A6324E22D421EC4424912F8413E0012148CD21421A1121528628189A8412C2808530122188088641411809888808221A852009092C0112885C22430118304A041814844B04868818122288480F4D4
+:80DC8000411D10044412812C1464929B211984B2894511083CB82484C4446022146A8881082154268418141204250444114338812C21C414221815683A41860427412CA818442AF188644B1C8A34842F22498206183041814A614542200441432802601880080028681024043A842181C1242C6441184C38424470818412010088B04408BE
+:80DD00002843A2A4250210047F29063504C460114244403144184E18003044848C91148081A52114601442241854604528141609841684C3548811521116C4248844981110B4121834148C218281F86F1840288221022D3C818502248490182055122082021488241068431212412C0100482458880028002CE861243452181880C1120073
+:80DD80001288801142F8E76AA038388400902810A42928110044241B421411A0421302428841C119240220A2212244A01226816214432891244A2868541442244B1420012229B22421D228076F8B0B840017420000388100001828C04421496511008814800211281052141604190290112061442400216413113228868222121214624822
+:80DE00003018FFEC02002884222880032041721421810444002641048E4828220044002E4420041C068288802886228822024880024CA28400A0481002DBE320518410C81A14130200841008008422680012156218841348218851142511212491128E21511882281110616141122284590100201101819C02BFE506461881248106211589
+:80DE800094444C816442B0141236461881121442482D188021A2A4832224A4344B8414C8608480162481A421428813846A44822813881494448A8404482998661D7B4034814C8211D88BF52844CCD551C276284871442B2473E8967465D9147644A1121F12FC78181D118D291CD21654D576C5136E111A83A4533C8242F481A13F48D5117B
+:80DF0000B581F231451394C146D2176418E13B193D1249ADA282641EC14F8AD484F8B8D1E3F93AA9B04262C287818FC1E283F464224D2195E28334588CF558211A7194781462362594482B131B1A4714421C882E36E54AA3C149B175DC26B446F474244D827FC1B55735151AB134F2D4844E564B244F287FD294947EA41B84174D49E84E28
+:80DF80004436C24F42BDF4F424325E847E24542ECCFF984AB235A5214931211F34032D184F13B244D11438781F8851D8184CC544C9A33846041B612B118E6223AA881664C26229C2241E241D84181F4422E412B8887B2484A8221A8869434F32F313648CE1228749F41C81324D162B21295B42A9A3584E2AB03A47014901452148810412B1
+:80E000002A082A0888801AC184114C2A8112215481D081C12419219811C2188222601240012E81400126018044012840020081A0246F564AB266F62521CFC2E212F268782B777F47F76D649FD4F4587C8F8DFDD91B33C9922BEC6B4CAF1DC5862F497984F5C1416A6594124E49CF8C559CC0954F41F994954F4EF634F44F61FD85664F419D
+:80E08000FC85B44F4AF2A5F447445F4CFAE4667F6FFF92925F63A1111F38F89A9C1F68F98ABA67624F6DF9F4F62BBB6F54F48C84C5F48484474BBF5443B272F675758F43F228758F96F7787ABFC7F56D7D9FD5F5F8BC8FCDFFF97B2F4BC3822BFD4F7EF6FA594F74FCD3D1BE311F1EF4E2F18F1CF8A8918F1CFCE4C855F128AD2E811E9201
+:80E100007F7DED5EE645FD54D67FCFF715E45F4DBFB1FA85F41F44F2D5B54F6FF6F7F72F69F9B1B61B37CE42EF8AFA8585CFA8FB26364E124F6FFFB2B26F74F786B4EFC1FB14D46F4EFDBBF3F064645F53F734245F52B269F62172FFC6F37D3DDFD4F6D8FC8FC4F779F3BF91E3A8B142F864A2BF1771CCDF57F824A43AB922F4F1D9CAF569
+:80E1800049814F94F844418F86F665514F587594F526E54F43E728F7D7795EC55F5BFFB4A45F53FA54845F46F271727BFD1F2AF571532F63F18383AF8DFF9196BF8DFD24444F6FE927BFB2FF5652AF83F18EBC4BE8EEF47F9A4BF371515F53F7382C9FD4F169F19FA6F56F3CDFD6F371757E748F8DFF69FBEF81F3941A2BD75F72FA3F1DEA
+:80E20000CFFBF153D15F57FF35951F13F3F9B197181F94F84585DF95F5B5711F16F4A1573F7DB522FE3474FE767F5FF771E55F5BFFB1A51F5FF3F1755F57F371277F5BFBF5F75F7EFF71733F3DFDDBF95D85DF9FBD24F7E4B26F2FFDA2F26F66F6B2B4CD7C4F21F7E4EE2FAE0F2220022C0141481486088240482648848422089200004616
+:80E280000442984A3222420029082A081820022420021440820400924A2288027F5D0D222042E822210128188041C81192244881821848188A04A2A04280410490922898D0122501822049A24120D9220829012182A04342100289033F3C032CF4112485F21124C3F41124A7241F41F64A121D24AF149921AB9451AB9443F24A9143F242F1
+:80E300009147832D914F82C4914FA2C4814FA264116FA265592FA2655DACE549C25A1F49C2421F4952281F49724AF29124AB841F48B24AD141B24AD981B24A19F54A9443B24A39242B94478229F92448984FA2F44B1750A61D64CD431E24141E68211FC116B881D458B181F4483453B8483195A714578A4E15178925D487D418F927128D7A
+:80E38000915BC28D811945F125DA144D9B1CD2A47D11DCA4FD9144CD111B29C57391F44E811D24ED9115D45AF9812CA97395784A6581AF4438A44E1426D84AF926484CF986183D9D4028080000000000280000008A04000000000014000041000000004480024800000014F0DF2B243845331884554A48115C68822CE48144E2884102870B
+:80E40000428A6182508280C381478281481AE28116E284D14241644243B242D82408A62681B8227C31C4A7D38395824012FC12C4281AAC164C384441C024ADEA90458A8252216046499322224D1196886889901C42112D2496B541E849A21C4820D843E4C25142714394212CBA483312001C6292188A74127C1411222128E2121571928D78
+:80E4800041225168452824FA2811B6C548BF8A0743239C229552942FC2C4374C42988743B15A688212161852694CF38518C6F21C8242621B81874A86BC243524578227441D4217414D6850288AF444212D284F29A248A748CE142D149E278DB52CE2137821D45271164224B34CB12EA5842E828D151EA116F47571D012D4419218000084E7
+:80E500004322B148082C6988444828822811289218003914D82221058B212E82126B124C028214802171229121004A81048618A849218210644422442E487FE80B2D4100128B141014612216A41280015C082C2882311481A214400110227422082EC2282AA8218812490110B144C14C221E48102184F44281D04231243024100448DDB734
+:80E5800080921663D34A1211C42949118A42312B3CF818811AD41AD9C183DDC23E82B6816182E24628E4D2C142CCFB148121004E1449941614114F28F228148D241119F3188543A221423016418CC54882C38664424AD384CA24FF2A042D6116C414496395302819C1282D244098118C4897191FC3B8123C424C91312A6882288C04164F93
+:80E600007288F2249121C68232A443A11890156C981422A016899B7C38002488124E1C2A188C84826282F034A140422252824054414121121F223121882D114A2908228F6A21388812148A448184823474812002524A123611806282853555855541001324B416C445831412843624414B4149B82474780E224B439125284204288429B1FB
+:80E680001212322441183018412788A7422829136C88455828D2848845885114C48219826184108412225858148764442889E484820580AA4241C9D5424224F5F43C002CA4211E23702A9148D4292212312943421192212728462901912112809944812121124126AB1A1094232F8471322122E455C2222094821504211C0A2A28E2E4C17A
+:80E7000088838292C2221E228F340141211084819412601190884200514C0C40048634482214481444422024022489222114C4828184A485E4212228220816134452244800008981044F41054127221E221CC32297621E489D249C22929931506149F14422AC188C392ACCE8846241844D881D4218AC243848444D224D128B2836F6116236
+:80E78000F01322C183F45C234D821636812A2848C21A8F14C8522686B43CA4A42638285E284CC242FF3F0322165418C4298104D0222131228C064031811819544A411C2291281328D4847848140249A121848B281001168488622230281D2846C24C2581621441208822181AE444318442221FCD0900213011258292211800244021742215
+:80E800009A2426A584A02143122424B82C142424618283414164884290824921E44A143814450848400881A0212800304800F038FBC0221817410060811200A8221890820030142644143818158844820800202589820212818504186200121244142003610010C444221AF49AC71041613149634119130133C42881002061417424100895
+:80E8800021282C629282418C5292A048A4800220D22401504889A24211118111415124442AC824846B422913086CF2979200228C14018128004581419184414183A89281203187822DC6001112888882008415426184001CD14862288814C04646646189A4212180842104C5823324F0378630A23440424882456224824A6921A4004503DA
+:80E90000864206890420531210D2843322901125C284290421822188A1274444118B42604A1304C98491246928C48430428504845F5E0960832E4214004068425652418694818D122A088111888221178112884AC1C80040024B82128800122A983C8812814C8111445848002298004220218401D77DC01842404801812810815249124C7E
+:80E980000A8008144180748A110110188191410048181A66124021E41441621110847152012714281420C4242812004249F65515901225240241895121811A8208885018812870880480982424C18A0298704198182849148801228D21003022482A051C022847A83C21082CC112CB21628023049FAF0A008CE4A18652414014943481C489
+:80EA000014A843919113012219B818C49123A2848951141B86132C62188A84C86100460B9B42204111012506144604683C0420046781221062212F7B081F23B2B25317C1241C711A61526B4223912483B21251436D144597AE4D822D21A1814F81D134FAF4638F9C52E14E244F343212841E928B28CED28B582CD221622BD5F18A5A5F28F7
+:80EA800095223F929211C5F4544455588119CC1A194B2488A2527E1289A6446A84F7AA9C3421918FA383B63161A11F8621E141F345B1BF8578817181F18C9A8B488E381D112F88E241C4267F41FEA824CC958313F284616B11AE889F94D118AB687C1DBE21621490A136EC51F23884CF842134143F245331ABA18F34513E9F5424F61692A6
+:80EB00002F2237544F44D8466241AF81913443F6924E806174F0331BE57529C4228D2A1374A8A41AAC998C143E829B83B654594B885B98CE183DC1835B8829BC4848B919A4A21F28744831441E2C1AB832E416D482A13843E484F21186CF49E5D606384E5568463C1427312AF244842E54AD2A8CF466184F4202167E3B0D400140582440E0
+:80EB8000420840628174164846481241264114111842941390121001214288501200601280A84100200148200112810012F01971343F31F1161CCF23F335211B33FF12F241417D159F94F448CABF9DFE91B33F13F11C923FD1B3264AD44CF28CAD9FBBF3FB3D8F84D858F16CEEBB889FB2712AFD65673B766E2A2F96EEE6B6E226F6B1B134
+:80EC00001F3AFAE3B9DFDAFAB56D1F14F49DA49F9CFCCDD7AFAEBE43F493913E322FCFDDFFF5C3E14F4CEC2BF826364F4AFA24262D564D344D24CFE3F2E4AB342F21F11556CF22F33D3B1F13F323319F14D54EF1486ABFBCFFEFFDBE333F13AB111F11FB22212EA26F48D2DDFAB93D9F97776AFC79D1CFEFBDA2FCE1C727125F77F76BF9FA
+:80EC80008FA6FAE36B2FD2F65CDC8FAFF8B29B2F1AFAA1E9DFEAFA1FFF3F1CFC7D6E9FC7F4C9C7AFEAFE27753F1AEB32F2CEE8FFE4F5D3E14B446F28F826264F4EFA7C662F63D34682F23C6EA7A61417316F42F52C3E7F53F33B1DF772BF84D6F7F113111F3CFCF367BF33F39BB99F39F99B19AF2AFA8A38CF72F2A6A51EB3EF95FBDA89E9
+:80ED00004F1CF5C4D6BF3CFC2BABFFB3F32F6F3F3FF5D22BAF95FEE8EF2F86E6A7F5333B3D233BE8DFEAFABE2EAF44F759619F84F54C5EEFA3F34743BFFCF86B2BAFACFE4F1F7F58F9C4D42F2BFD26168F8FFD2C1E2E546D744F43F32C1E1F71457331F32516DFE2F33517DFD3712FFF6B797D1FBFB5F7FBFFBFFFFF3B33BFB8F89F1BBF22
+:80ED8000DAF8AF2BBFF8FAAFAF3F72F216B3AF1C7ED5F1F9D1CFECFDABC3EFB6FE3B3BFFF3F7F3F33FBDFADB6BAFEAFADEDEAFAFF833333D63BF2AFA2F2AFFF5FBEBFDDFFFFEDBDD9FF1F57A7E7F77F7F3BBBFB3F3DADAFFF4F1B7954BDD6F2BFD76724F8FF96C5E6F42F5167C4F41F36C7ADFC20C146012C011E0124108484008402541B8
+:80EE0000041041245148009028114A8218A81281001490145014200222204248A14174822C8204484A0200DFE104822849416822282412E0489212D02221C812C083431268822D112A844AC2A14D42811887112B42C22722A012C22501A3624125012991613011902142512148002143C1244F82041C74D7092CF41124A5F3112487241FFB
+:80EE800041724AD241B24AD141F24A921B21AF243915AF74B924F44A9743F342934F83D452F924488D954FA2C4816FA264516FA265192FA265594D4A9E242D4A1F49C2421F49522A1F4932481F49324E1F48B24AD141B24AB911B24A19B54A3924AF4439242B94478229F92448984FA2F44AB7D022E441D63AF41124E3F4112CA11D642F21
+:80EF000014D141F22A951B618F547214D81AD884F44A91578327144F83541A7B428D916F82D118B9A5044F8261181FA265594D4B1E25A41FC8C2DA1E6485F3112460C165F3112C4F24F1812CAD961F48B2427A85B84A3134AF4429FB4A96478229F9364829E922F5AF184008000000008002280000000000008800004001008848000000AC
+:80EF80000044800200000000F0B731244843416433441CD1220289C118BCC1A113F8884124844728628717B0489148C04A8C1234162269548226343242860221248621C828D081C48489B834B4121602484B842D84812186D88218E8C1022CE46F0F411348113C21637614E182016DA200842D148634D41864449F42B824C8258DC48286CF
+:80F0000034498C9411801102882D1444D6852852268E1274499B38277240897248518421428E2443C224442B48484561429FA50B4456157414C8215C16B512C218C93217A82E89DBC14358C243986267924C78C47A2CA1485A78827884F244182E122485722412416248A5B645E824C822862259629F48E46338A543E62402268CE424C8D9
+:80F08000844C1274A49A8C2C3C187054E24C07290414195226122B1284249285124102A04918414A712188835448844CD28104114684012A218C0118C081448312A112848522D11A816214455842488D822200A14B424422DF3209002501105112A014281CB1114201180000409441442200D021344848A04282E041120298130100442023
+:80F1000081282124E1247814080012890220A23214611D2441818D122E188B1C1117A2C44221A44D424E84412E81C9E4A158488F1894248B49A0A487444D58C09285E226418261244AA8282483B28A028D11337699022FC294428C2411086084AD512C6A4CF014488148CF214502401418B822A148118522622413532146C2D44100981057
+:80F18000982412A0482005248C1462241A88748422082A38133019421E89D02A81C8581860244C4188C4A249014E148428AFE34E41C42525011215381BC071C11301814400197A444858C2C69541C32C82924C85D421B45808762202B0122602A9C1A8409221412143260442898148C8428D11203C288480F434361419C34A1312120C4017
+:80F200001112011245C218234282668820117442A124722C024881CC4202469238D41C04422B212B2124124890422C78884482028416C444244B388668CD2931144CF8CCE35042688351142C622287216217A3228E415042142A412448413C4831A5443114C48126E84601478185B412022D1116B483668413084D184A62286282381448E0
+:80F280008E24402424A1180021403812BD5600108403912200432151181886048641040016081009411480810644488002105824403126830142188C4A4888712202222005A800AF634972246122CF2132356C6232183B241E2827429E4116185249184532C419486C24165C85229B4243024698248D148B4345EA21F648124CD11436433A
+:80F3000060224CD268E131C2448B342B48CE228CA8C2254868C15AE244C1128AB2487116A828164C76820F1840018184830225311110C112922113884208164881641441816D881CC258284502412884122A08AD911221482E8200121C418808244121A24C21A8841220F8B1660000280000400884405218164668A12A0400488C110410EB
+:80F380001862822064448C74220800448722268232421E228C018D428B1C428100622062214816085F5A0512449413011E242972128432818072143888429142A216484962128486216A1924112214851244180141182442402804422813845341A11B1422400A12288420F29FFB208102100800130123012100000054A11440814289719E
+:80F40000828141C1148582011824410040482A24724212011574110223440A00220048AFF10A2113818104209121A5C424840014122001222091482D88AA14C242A012C0C284004C81C481A0412A81C8141661422548948C00484C48A21481124004005FEC054440094781C04E158266428002608481424508844840028447288904488497
+:80F4800040F824482608224440240248260A2E122830588448200212100824F0D15A0080145822A4225028840024491241542840088014014821109421484E22002D41108212A2242428008884B0484142110888528828A0121870F44301460214100100A0128CA812816982092CC11120285842604842888314982445111402224724B0F8
+:80F50000240441F084281810240440028118208281012D2870780586348118C9C114124C0100280010A442800422484144E3344A608488424421003044004440081028018426010022AC8681424208148CF2ECB640684148205848405414245041841C220180025081833892221941180184184AA294142A18C218C0D98114241812851183
+:80F58000214304282C41584226425481C0182D2470DD42021F3E911846F48814224A333127444B2A22818343BA28F11144E083F41A28F44ADC122AF4C821418D9114DF18E216447B685884E544E9448281B11CE8867488742A72D89242142D281B1E8CF619128FB4749222B22AB238A7321A7122A81185A5264F23091E1486549189618151
+:80F600003D168743744F92529A382E821867182FC1F42C128CD4226312132211F58C9D57A22F72FE814AAB448C982899D27294584E628F6348E24856262865C42945F823544F86D3223764A57D19C24519C1592F84C21A27A427412E214953821649D8450441432171311B741C58266193417612D881421C7945C18883358C588185F9C834
+:80F680004824297DC83844ACB112D482F1E45449F342868CB141F6225855C2245C816322388C721872B8F81916686A71C418324C85E2450C88848331682E3224AFAB4D0234402148021C014D9280087C081C083C0888114411443110211121192119329821131C3281308124174824443412140041244110441104418187291416D6A2118F
+:80F70000721D57539731EF85A6216F85C4A62BB91F19EB49F91496AF4DFDE5E49F8CFC44D63F9BA9AA1B445F88FC5CDCCFACFCC7C4C7641B154FD6A6BAAE925F4BEDA9F472FC5ED27F5DEC26F762A51CF889C1D7627F7AF8CFC51B669E91CD258F81D498E684F415145F55F73414EBDD2D442F48F82C3EA72226F4181C45FE8CDC3467410E
+:80F780001E4816721F55DD1711CFE7E633F2524889FA9C949F13F3183C8F81B9D8FD756C9F85F464F41F9BB9A89A48AF88FCD8D88F8FADCECFECF41A58EFCBE582F1283EABDD2FD9E4C6FE48C19F9DFE81953EE54F53FA8DC59F2A781AF23A48DFCFFF7859EF46D6CAF218388FC6F711129F11F33416EF8DFD72742F4AF82C3EEFE271229A
+:80F80000E443F314364FA9457316D45555884D167D15DD17EFC6F62437AF86E42BD1C2F81119284F69F14AC4CF52D74CF5E5772F81E993F3D9D9FF9CFC9CDDCFBEFFCFE5CF747C4BF17C7D9F92E237F2B76D4DDB6FC6E6ACF4564C5F3EFF36741F49F13934CFFBFB3636AF85F76168EFDDFF4979BFC7D591F651789F11F5111169F2DAF4A9
+:80F88000AB746BB98FA2F12E1CAF82518C2E1A8FB6457114F41D17BFA1F11E1CDFF1F91F1FEFC7F62437EFA6F6BA36AFC2FAB9B9C5FA9F16EF44FCBCFDCF61F5EF6F2F81F839399F9DFDCDCDDF59F5ED7FFFFCFE4FCFBF91F52D6D1F96F2F9AFFFDBC6DE2FE2F6FB7A3FBFFE42162F63B2B3F2FDB48FB3F3182AFFDFFEE9F8CFD4F75B79A7
+:80F90000BF97F71939DF94F74D45DF73F12E22AFEFFF6A786B9BDFE2F32A38AF82F13C38CFE2939A9014C011844D118443022284228400148C048C94280082819028009028418121831404223024844028628122482216081A44A341281E482890288002FF940F000024122411254204128502002C0118601415081588D82254182944B1D8
+:80F980002124144214026190128426222104255281508185821428011002188001DF9A082E421F417228F3112487361F41324A1F41F24E131F49F24A931B28AF243985AF3439A4AF3439A42F34F9A4482D954F82C4B14FA2C4816FA264114FA265192FA26D59ACFD98242DDA1F49D222FD9124AD821F49F24E821F49F24E821F48F24E9278
+:80FA00001F48F24A921B28AB9453F84A9243B24A39242B9447822B944F82A4944FA2F47ABAF0224B1E44EF2224316A1741A7141E6C811F41764A95218F54B314F24A14128F5433242D114F8384F336484EB46FA2C5942EC8442E58442E58442E5B8D242E5315ECA2F1116489F111248B141B218B1419B248A129CD828E24ABB45B28AF44FB
+:80FA800031A48F4431A4AF447924E844F926488F44F9265ABFBD0F86280800000000000000002400001880080000140000580000000044800200000040015FB90D21411678215422CD111E21284482850140594A60421221814211414880042598421F64A3242904A82888F084128169D8A492A42C8232224A4238124844A88A028E2C8901
+:80FB0000D4C2058B4889F257D1144571A2F181248CC121227014D881622222279114983CD8840220A241C05C814181A34284431418C4382AB41614941126342843D229012CF114881E8140A1258115068CD12A55581880624616016F550B4433FE15A81829625328102DD28612236289F398224902214846721418944484AE18248992447A
+:80FB80002E496F229429622E94C3621843B698D226629822AA31A6130813C22A8F424155422AE88D42F414A883F4245A6664941E289F5A042541041D2C34841CE1C122224861811411508420816281904181002944C412901480052904181044D824411C66812F228122A44180041658221508100298245FCB0E2081012211424822110082
+:80FC00004A8824042304428001284870264204008004248241000044818A5222008298480088220088268818F494E9144815062D2142A762502B91266628848411303412495412418631448241628418431322544222850426A741889031181862C041F08A428129C48687481A9248246265024810F8B8EC20440129229222608425216269
+:80FC8000288442004CA114481441924904442C342416440424442281C027180013216141680025E228C488884C4C040028104208449FA6078156861121544927241126181512C488662124121234421011A282481A62A8E0210248804444628843A448200240A8283304844123072D88384E88222D424488232648FAB1CF107512C126845A
+:80FD00002824424513C4220081233144904821278C80480400001028C2828189020021453228804AD82A2128480A30128483B858322A2D2841A3C1444428EFD10230241130141605122218502240021022248291118C048002818301C02442006905280028004484C502808484842108008280C7442F720900701402284303209491819850
+:80FD80000012001841812842812400282E860020194802160224122112200500128141008240888401F06B1350411826C11436F4152243D114C12426A281A4832191442C1128B4921424C16842842240B818D2840A263248AE18815820018982A1281867818E4884108235588564882A94A821A416C81436B424F443E440D2415224842144
+:80FE00002006211A44032C082160249028128D8141001002002362480024442582522670220281901286140A242024D128098912A4844842F0F25D000000001120098221504250280000004128004528342410228128114214044384020000008240C882C01249941800242F81091141211694111F21024034428250288331188821C028E0
+:80FE800042842280044144188E247042284A6223100410823182232238422C480283088091188129080048F0791F00008021010023040029911200212014382220240244414141800A2D12400424002221822188212184880092841280110224FBCC50988F44B442345414260311448A7184D444B82EE28262C28642088902242512E2410D
+:80FF0000A1114B898A38982A8CD22A1481817A185A88CB444E44424E16822220044554444B2A2A226281A49082274485522223A411EFD20B000021104202800481814210020082001004100422000000800100212C0A800424248100000000F022B910D882A414480000244014C62422280020012012D24221A1928A8208001C14416188CD
+:80FF8000818C24A44182441800506241CC228202212001002129F1197B4008482941428421021042042800004842242421800188104488021400848084088200004004890280442824842812025FC44702581001000040042C0225282404001002188008244002140084A04100000000448002200400002180D18D040010014042020010B8
:020000040001F9
-:800000002600C0921608C01212A04180F486E8D024F4112485F21124A3F4116CA3D441B64AD141B24A9921AF249945AB944782AF1439242F747925D812F9A4481CF9A44A8D816FA264114FA264194FA264592E4A9E244DCA1F49D224F49124CD121F49B248F99124E3F48124EF24D141F24A9219B24A7985B84A3924AB9443BA427934985F
-:80008000924F8AA4B44FAAF475F150A619F62852174183F2114C29F1116CA3D241D44AF991648D325B61A9F9A448AD911B422D961F8AD442F1B6481CF1A55A89F126C21E814FA264181D5A9E242ECB1E252ED89E2C2E491F48D428CD248F14E949F24A818E24AF14E1497248B591F248241F88F24A1443BA4A31A42B3496D842F386484A8D
-:80010000F3A21A4FD90E82820000000000000024000000008008000014004280050000000000008800004001AF95058042084C648218893211901829287144583813B114B4849211863299A2401808164128B882261808241422829C018C98848B484624643122502815A41C2D48204124212404427FBA0B118662281C82D16111C184D098
-:80018000161283A284250149124818C42828848C986460248449028561A1822381044C244142810416849838CCC44AA0482481A0418DC36044925CC1818B28FF990714C632881362458D24271181197123741691A2E217C415C2318744815426EA22312882CB438446C218892A78E2A98120C143854124D51811B388C484CB1843648685E8
-:80020000F24C22A0425123914A484E8825044E82581CE885F8D9EB0028240013018E240081C01210188431A418828D8182810040110410D8A208002A240800202488F11144008D82B048081816014B4118450122BFFC0718001608840081B042010000890800204A040000001248122B428001001001820089088800800828800380F4492A
-:8002800075A024143228209248A04126082A84258425681148C883C22141C0288A628218841A2214420810022098128B411634484712E02224E48412088A4404004420644828DFFB0358113232402804830529A14212484A21681142C822100480280281402201D022021840028412100590C28C04804C840822A0124200DF7109224810FF
-:80030000082881008922044222008908403821A2418B122881922083048924210400881A84456584A2A02484228908280000440049A852FF160800918100812843814108128814008C012668818012840240042880228882914412003820C8184CC112806121002A6142308212121240F86A14244001210018818414142850222C8818443C
-:8003800002004484842424A4400C002B168A04182812290848324D2181221829040010283118250420A224CE6A0020C122248921040082008448818608C14400200800004A8108104482024412D02221048A82048280044200224800002FFA0621141552282412896582411286212241C2C28988C81A456842830183428C12120AC1488864
-:80040000242A280C638373148221F142121A3E288CA24229B14281110242478212A398561212C0482FC1030089810284008911110824864801850440084120080061A012202235241248008222001741492901828004320038008022E212020000420080010000200A000022000020020000000022000082004A0100802404000080B4B796
-:800480000D8001808124810184000000C04820084A084800424200800200281A0292181298808208588220040042008200EFF301200100200112840000001008000042004248008002002818A01818808108202501802404000000B04B0785B848A444421A2404120041A0222A22A22820048224CA021AA1119AA8888A0200110081A0647B
-:800500006A2404188220221884A42A2A22024820042488A0153F210B00000000000084000020018200000028002004000000002002000080040080240800EDF510C858424800000044414C2282828404424250229012122A298A080014111484818C25840500880044414C2282820420045022901287E44008480012000040042881100869
-:8005800000201202188008002240014008582028890188004480020080010021F075E200481218001822004480120800810010021880080022400140084800000000448002004800002180D12D02000000000000000084000000000028000000000000000000000000000000F0C5B230188B4442420018001014B4246282620000404242F0
-:80060000A211129AA88882001011111118B848A44CC22200001014B424A222224200002424241AF1E7164048888405120000404C24A4225200000021211818A0884200C08114608184A044000048004444A0220000001012F22E3300180022000000400884000000002002220080020000181220282101000020240442006800001FE10953
-:800680000018000000000000008C084800008002002200000000180000000000200182480000F01FD620212101281A812102001028648440888884240800222800A022000020018A0128181A2102000000184A04800400F0ACEF008081012001001048181828141808000000002A8204284200002021A88812008800004280048842228207
-:8007000000F023CC001820010000000084808544282104280020A2220020028200A011A011800888420000A04442001A240400F073EFF026222B212AB11221B112012C5122881E131F11B188E999F848888F18F44848421F9414815489814AF448444F42A4242E24222E24805244412AF226222B212AB192A1812B99828E922582E831F11F
-:8007800011118AE999F848888AE48424E48404488518A844BF6E062F2242A2123A2111025022211CB11191819E8887818F18A44C42941501848588E44414B444A226224400444584F22222242AA1131AB88228082512C2111B1119E88938188B48CA244408405888487F840C00000000000000000000000000000000000000000000000044
-:800800000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000001A
-:8008800000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000009A
-:80090000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000019
-:800980000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000099
-:800A000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000018
-:800A8000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000098
-:800B00000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000017
-:800B800000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000097
-:800C0000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000016
-:800C80000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000096
-:800D000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000015
-:800D8000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F95
-:800E00000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF07
-:800E8000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000093
-:800F000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000013
-:800F8000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000093
-:801000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000012
-:8010800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000092
-:80110000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000011
-:801180000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000091
-:8012000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000010
-:80128000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000090
-:801300000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000F
-:8013800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000008F
-:80140000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000E
-:801480000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000008E
-:8015000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000D
-:80158000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE008D
-:801600000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F0A
-:80168000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000CB
-:80170000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000B
-:801780000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000008B
-:8018000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F428C420848002A842422222162884088422821282128242908008818A08420040018004820822422220282280000121A222105676E00421883341846B8386481285A288182084A2A0238286A812A212924A483181A8881A8FC
-:80188000C12A21AC82624A82048A84053AA441284A0998AA014A8822A2212AA186C88282D26FA10B20220100812A212489018A6288420081A08228008004120020812288882624840118001842001A822928240200AA048084FC49630010081AC4483800001800888428004220812C242803202801422002220082488001A01C802802A82E
-:80190000008002528088F1A3E300001008428100222200008002188A01188200800180882104000000484A828202220000001200821218F093688064846084008084A2420000282820A11200882001888028212884084800004800200422000000282218182288005F9A0A00110000220000000000000000000000000000000040080000A8
-:80198000000000001004F03494002881200100148188241904820014492802588822A28021220180A429483842008004805821424229811188982200000000CFFE4D4244C21110281431182A24A2248B243012422089C632800181104428224598242C3884800A2982988400250818BA0482A288184A8188618246AC38182A9514F0394C24
-:801A00002444C01930184214C0218322DA2836418008181CB2842382A1148830A420A31283912424202AA4214882004200D0212344A22118A014230260842A810118F07E6800282100001628044240222104884824001028028480042098C4122A0823024908248420A984A08482881688288861824482A04344F078951002211A52221239
-:801A8000816024848B14800130118180114541C89100488505541112C8800140041225C2240041822100864824E164288211840940F8EED71419448111E4925184512E181290A22B411123842158218094784CE2492214191A4232582662453167232E188150435061838821B11428A184128AE4B1C44B14588212A48606284A1A88F81F2D
-:801B0000E9800429818132181484160284180018160120C13113228A0500A4481302803118401205518D827022644812422C21945834001282201822A88284884F33421211014C321B2554841A2244AAB429C411290482950248C3447414C88185518229446581641D5616C3E6228C014044222121210149882818914A87184B14824F24F5
-:801B8000C1286941842304A45F9F4F11C8224B2429826282281AB212E29231124C0218322648C8344BC270A2DC24618156D44208124C189228324062888490428594868544823514410024CC1611189288462C784448644212816F4607852261841C0140528145188462410083321240080021281281C18C82084411845014842248C02270
-:801C000030848881212042A528814004A014A014244C24E29E07224411301318120080588192A30824484283010046E48208212462004CA8212A083112282A2821C11800104408C0449212490200A81800BFFE4981C224178223511236A8212E116D1836197228C1129816FA2812C02C890DE9486444495A4AE1833224902C5C68822825BD
-:801C80001C6221C0824B182518AC48454A4414082784CCC49849618A489A044C8C2195282F9F0A24126119A21240422842A4921288840083A4414C02281289C3488820D12204A021188288112228C3829214922921012012811841024445084D48384342049A4D4102802404502816888844228201984C8112C184100825582400818884E8
-:801D000090188001C044344428802241098308000050420010420A5F420E2117242C84038444448081014C052240314AA1122232130814866A311214C011288425082901814283088180110115425221288612088C4108443288AB64801248384121003100868908121641188408871285A18118442508000081903629111801418501849A
-:801D8000212129524840288148C8884018121482C2848B811F1E08004C44141141840214C014821442448C14C9421849010000249E4224004888244D128E142D811B4800253121C5114102288E222810448401120010D467034042083018400480147814028304299842488AA48213020012108838183022188100821200448110244808B1
-:801E0000160416886128002348011A4AF1579C0000314002818C440320CA2122920014000085040010081812250829084502882200400A4004201C04201C048E1400CF180E4200181844428021014480021440328800204141460B141814884141492841C2188141330182826042154234818111210018100400BF8B43018C01705228024F
-:801E800025118242815982701241848108411544444142081882B05202212AB8840440A3818D1115E211F88144852374880224F0148200440090942844F0783F4019870411119422118041042D288215D8814485E112941287182918B1813111195821911512154C011554C1C0442125082125341425718471125D188D2114256A81182534
-:801F00008211221112B48B04C04124242345714E76284A98118E182CF8124211E847411E4559B843C92426F531889A582425110A9658322A61114F82E248F3181A4514B289D8A7F995418538839B2297C111618E888382F88C822B3445D2AE89B158A811497124F49C25C5B4D24C8156CA85B8530484C02423215813B02883F133119D8898
-:801F8000ACF1C86B142BD57F81933C1D11159C841781189B9487881D4A8E1EA765CF82D842F4931244648718641F127818F44481237842AF88E543F8923325D838F88A98504824498888092B984F3B0925731152424F12D119F519241475F148111E215AB498F18484279183E418B14F18D28874AD816818501A95CE93373125B311781A60
-:8020000011817112B28448F895136F116441A5F812223427A845B31CD3F9127113137D1151814444272129516A25B412A29224AF8B41216412104608842001122412241608122482241220012190128129012901691118021890148088128402008400449200204904441BAA242B444F4551FD4F617412F17C762FA4F421219F95F5B8AA2C
-:80208000FF9CFC484AA7E8B5F18888DFF5F4CF4745F4D9198F95F39134CFD2FB383895FB8983971815D1BB5999BFBEFE8F8FEFE2F294246FE455453B885F5859D54F48D888FA9D1EFF84F6AFAA1F875693FF9858991F1859D53F1584D8C8F818188F2D5D6A1843F23C2CE5FE3687242D426FE155FF7771A711CF67F742421F72F25B599F2A
-:80210000BAFAD3C54EC2AFCA5939BF98F84547F755CFF4F8D8D98FE3F33B3EEFD3FBB8B8BD1B9FB8D899D91351999D199FBEFE9F9FFFD3F2A4A4CFD4FC858D5F68F88746F7C8DFD8F838995F4BF96FC9DFB8FA5B4BBF92DADF589B9F387B8DFD534925F29A988F81B1C8DC4AF182926F42F33C3CCD9E1F2B46F343437F51F5292BAFA3B2DC
-:802180005AF47C77AFA4B433F359591F22FB4BCEAFA1F1DA7AAF34F4CAC9CFE4F5CE446F4AF2F8388F85F3BD3DEFC3FB11119D1A2F28D81858A887918F89E9AFFF8696EFD2F3A42C4FC454C51F68F893D757C14FC9D989FA9E9EEBC69FA8FB51592AF288868FA1F192B865F45A438FA8F8989A8F81F1D8DAAF88A8996F4AFA342C8E9E8F42
-:80220000D24FF32363DF73F32D2FFFF2F25B41CF77F74A4A7F63F35B591F32FA4BDBAD8AEF8CFF4B43BF9CFD4843AF44F1EDADBF3FFF3E36FFD3F23FBD1F3959ECAFE8781A7A1858A88F89F9FBEAEFC9F93E2FCF8BFA4FDE1F59F887867F79F19F1EDF99F93999FFFBF94FE99FA8F97B7BAD8EBD8EAFA1F19A9BE748AF8554AAAF89A91105
-:802280008F8DFC1A1C2F49F926344FC3C38E7F2A0625016140815414121496088A0484A0492419041B4989329100440029118808229092D014081C083C0834164823081648220984448424822088025F6F0782112416080010124102181781000081800128848121812400830144450A2C014184A1100441840021400281100A4441407958
-:80230000FC0F2D431F41523C1F41324A1F41326A1F41B24AF11124AF24B991B24A3915AB9443F34A934F82F442914F83D412F9B4481CF9244A1CF8264A87156FA265192FA2645D4D5A8F49D2A2FD91242D421F49D22CF8912483F49124E3F48124AB141F48B26AB981B24A19B54A3924AF4439242F44792498924F83C4944FA2F4C344C0BC
-:802380004A1E64C9B51132681F41A2121FC1B42AD141E644F891288DB45B494A7321F848844B4A4EA13E482D956F8BC4917F8A055F82BD48F82548C25FA2E545C2998F1CC2881FC9C24A1F48D628BD81B2683181AB8219B46AE948F46A958AF242B54D28AF54A94AAB94A229F1A44829F12248982F8BF45CA4400848000012000080020053
-:802400000000000080080000140042000000008200100400000000601F904220424198412162202124A81830418458848A64298228812800219018A601848031148011DC8151C18D3520A881100880C1486041200890248CFD24486FAD4801235848E35222003018A3040069183A4640542881C487414301C225880161D0244824526810EA
-:80248000D61228614828901A22283D2C802941C6124C1112048C7214886852F018762044D868E22244D812042A840143846822829D6247841285B488C412C55248411A225828122C088A9284152C52688554241B14161478217434CB182A28584841204294121014248842328443E921F2142F502200150C100285E28104801914024240CA
-:802500006288883289014221008741111002181221828117498100E022912181921812872443911200848D14228B244D487F250D244441151802142824D022082C080085424814110840A824AC9428008452652811040014502811221120480120981A400480842228A4481F6A0A5C621222237224D1A231245658C1841CB13854181286D9
-:802580001C5241181D52AC31548922494454421564119B422993835261831114C282B2293232C9C252412C744C6188A9D4218124D482082781522389614450482FAB0D11536222D0264282A242442129811528918440118865815880116824249411A422E0C16441184421242A01604224444652491442188821294804B0C2811104C9E8D8
-:802600001C0C260644991291184591188511C8838CC2812184218526415512256C82884443C24C49826116ACE11C5122508400821C382227A315A81611207C88125821428B1484D082810522C242489FBC45110880081844002483D84A410A269818124C629800641E44112C82D128012782409A28844484C6A4249088120060118552817F
-:802680008CC2241C0180018082622932D06C0FA9028745AD2212811440810115240132884784848031142183221112048140020086518124421618034100008A14840249014140686482A420F2E12F0021118A414404A1565C4A0020082121A014642281A0A49068801414B41448C4128441800138C0128B18504A12002328042C31882260
-:80270000120041009F5F448212D249C11A49815114404C62A81484881658284B1430C143B11202442E812D22CC82314841411E868D248C318A45612418909A10B48201974185223C28211E414C41321C22844C3222CC21031FE80B002428404C42E83461C160812C01249281478289014445B8488304488125922824810041908428899183
-:8027800021181281102251188008208108184888826022DF120822008002415424883E81984E84C849C8828BE1882E983998A2881BA488192854142028B884242928388423684882828A242C3981822068988183042C18280420240223E8D5071A14C82514482011885181800444003044608411420042218901384840020052843C721827
-:802800008202214C1282888192223042201488012001C02D20724421421444011038482220012B1480A24100492381964166140112290229018051122C41518100128181203142429048981800502683044A088F2C018440082443114302167443D841011426181C0195521484459118E4401452421508118365814212152884C221C02106
-:802880000050182489B8814401805824404832182921BA61018200800248288CC286800888A081218D842249488268212A18224208208A2258248212233C28824624882209860148241241248048C21886220883C8419FEB4E214504001E41430242289041C024CB414A924190132400258485112472245823181D4280448204001C923A9E
-:802900005424106238008B48868108A12B29A0210020F2A1824004110024F011425431207248210125518414418B42100400212741464144435828C048148400811190491248508140021382284108812004E0C5021001324592241CE244D114038C082F1248884884A812C88048918925F121841C34212187288C654AA04A604860182C70
-:80298000A158A018204848042D41150229840210A8818149A841F0F8324028C24880841408004844181A023D4812914470118413168441889811121183314216014215D8229148C01140311B1662811C48049AD218311680A148211284A181DFDD0F6AF4844887824D212E42288336448F12718173322998514B59848FA8F15A218F1A74FE
-:802A00001437892F11624B8F1432D46E61947D25324D112CDD5EB2426821885D142B9139D28838211BC11D269F85782B91991F88E1243C212F28714192534F213988253E4A2F8821F492784641F82EC9E04142112511B411D415E2C165E18F84B8C1F241A1A2884F4A8438A44B94CE286ECDA6B24578A4DC217C82447428D842B438789229
-:802A8000E88238884C68A82B8517281EC837382F24BE8AA3D18AF1148227288F612839828DC96781862288B938043A985AF018882F2878940D181D241C024E246F74D142D131B247D24693C81AF55A85F48F25F967451DD817C1BB9265D2C5C9111F217D2AD525F867421E125D1B3FA87261F1D1521E5A2F8CA7458E434E41C7182AF398B8
-:802B00001D26611A348E184214B5F148CB1B248F18FC788123D28284E9A159688C18AC582AF629150022200226C248228426022284002C024C82C42290288012820289028912022181210084210084608124844008122400122021246144DF1B4BB3525544C5FC1C7C4EC45E714FE5F1163EEF45F5C7ECAF88F811923FC9F994944F4DFDB2
-:802B800099D98B881F3FBDDAB998F98B8C8F98E859F9F4C74DC4CFC2F41D151F35B4D8FDB9834FD1F9D8D8CFCBFBD4D41BD99ED21F2EFA31A25FCBFEE9E94F5FFFD9D18E88CECA6F78F8C7C12D892F15F5949CBF99F86666AF8CF5E8F8CED88FA2AB114D8484CFF2F6CA51342B751F8656CCCFC37344B471F7553E7FE5B716F3C7E5AFC834
-:802C0000FAA1B23FC9EB49F99CDCDFDBBFBAFDF5F7EF4DFDB8F8BFCAF8ABA95FDFF9F5DF1F5AF8ECCC5F13F161E34F4FFDBB93EFCBFC89C9CFCBFF9C5D1F89F9D1D31FAAFE91A84F6BFB7BF94F47FFD1D19AE12CFD8696FFDCDDBBFC533D6F4DF99B8B6F67F6DA5AAF8FEF85F5282A29F446CC8D48CFE277C64CA1252A9624CF81A36C1F84
-:802C800015775DFA767C4F45F5F7F4BFD9FBB8BBAF8DFF84D4CF4DF5AD6DDF4AF8F1D3AF9FFD38F92F5FFDE3E14F4BF9E4F74F58FC2DEACFB1F17577EFDFFDFDFFCFE9F9D8D94F4BFBCCCC5FD9E529BDA3EE2BFABCA49F9DFBF4B41F1DAD888FACFC9E869FFDDC1BB852F78C97BFBCFC6666AF88F5A8F22F2CEC22AB516F44C4188FA6F798
-:802D0000E83A145AB728B624F23C386AB671F77B2A3F97F73C247FF6FECAA89FBFFFDFD84F49FDDCDCDFFAFEFEDC5F7FF7FEE8FFDBFFFFDD9F9EFEA5154F7EFFA4A7CFA6FE36335F7FF7F65CFFFFFFAEEEAFB8FCBEFCDFE9FD8797DED2BBAA9F3BFAB6B6BF9FFBE4B49F3DEDA9F9DBDBEFE9F9D95FBD8BFF35F9C696BFBCF47666AFA9FD5A
-:802D8000BAFA2FA5F53A3A2B514F45F558588FB6F61AFC001004414021014814481412441A44A4411041145148114211446044292184211422D4120127123022482C01148224483448A048249224828192007FDA0D41114048A2411811A1122908984889281812C48286084188484C582200C082822C218829089281920088864822190211
-:802E00008928880129C148008100A27F9E052CF4112485F2112487341F41324A1D24AF24D1C1B24A9921AF2419F54A9343F24A9143F2429747822D914F82C4914FA2E414F8264A16F1244A96E1A2645D2D4ADE242D4A1F4DD226F4912485F2912CA7241F49326E1FC8F24A121D24AB9619B24AF91548AF243924AB9443F3429447822D9459
-:802E80004F8384FB244ADE82F022431FC1F428421D248F16F111244392616B1619E24659414A9B258F343915AF247A25D842FB14484EA167811CFB26584EB14F22EC14DA25B198B225E44DF22441DE254D481FCDF224421FC9D424E4497246E3497224F191646D124CF66A9515B4429A642F7418F448B441ADA44B432F445A86AF44AA52E2
-:802F00004FD80E82824800000000002800000010088001880000400140024800000000000000000040015F630B4502144CC2424A528217228D421626D8A142229442002502001848444828A183531283022324A2142141113022004518816413004200108878228488812852146E6C20274954288195042081280512132838241D48415290
-:802F80003092824181A14818444C0118D022014F2201989014C11C252401C18A811988388429A11444428F243184466498245F1C0776264D419248635682221E4A4D1243619223B3438824C24A4423012729984447A160288941CE1489C212158281D42E43C491244B528584411481F424114908626068184E184C382486D82449C4211262
-:803000004FE5090041CC0215081121824A0800291844014200200483A442A012140048282901000090418324018418928182000023A441218A948845F2F85D200241D01E8114022482A1F04A119018824C28A884128521180800812185840400004004CC1224018445628140088400891894284351488008DF960A21E082C139288483733E
-:803080004A24C248A08400D02A552148268402C15A328824814A12C4824D182314B822414496A4404CC28A88AE141AE28AC4A28091582939148F24098C5842226886644386F48A2C2428A0121C72182104C3042B8420180280D13228CC842A11014A92882480166688CC0424184094224058244C38922826F868862E9821F0481289081231
-:803100002160C222C48222F057720050488D12434278320A2881A1428F140189D1821C044A02848748890140180845C21242842244C0844444891208498901008C011249E1849888C318321468411E8449F844ED148121468802835318811497212248184934284A088049A2122C490427881048881824081058A4804404222544921412B8
-:80318000874812A44C12021628412482321821414AF8114F24894424140C441616111242542A482D82260288230122861802522489424414C2182C04274823D58242C4468430181281288418211E249A0244624508188504466281F0634680021002002842008018584110324C814C8144080010028C84021A0486840160118A121228180F
-:80320000080040180421808104230A002F7F062A44449A28A012167922C1412D13D082A44949142D88D848C1882E145698884140CA28654818C218881A6448272C4903445CE122E8812221382A1688219128860A41A3721428A1438D248E28428C81FC382750220044401C441842280225628825825422481890A212C042880041833C24C1
-:803280004225024D181006A140421C684160C821122911041A044100290144249F2842010048838402C042008628A848828004284948022004128484472890244810082D642088881C083285D4C2D14298280000004C8221880888BF3B0D50281A064CF2114846A6412888881242102209006242412C210844412484447084080082C120BB
-:8033000084E228040040084902A018844018128201F0ACFB8054210000C4248120A22821424281002A0C2084E82188088442248D222221880088100881904443A8140081888012A481808C084482F0F9634019924842104412441218125129848430842200C28C08851414081881804854842C8148888A05800212244812008882004110D9
-:80338000240118F08B1BE024028414224D28004886210C0084A0428A62888484C4811644C84A222002828098884441C24008826028E021280C8918082C1844582212208884F87A83C01889C44149020048800227828A86828884480890144002182302A4884B42C40048888428890C898882110422811A2804833514C81200A412253A1402
-:80340000BF4142518426210148428C04414B148411A018682A482825848C881404006042448130880000004152AD46004E84002021012820E8418E94223022421F3D018282200100140026021012040010440845484A0C000081400400008B822440088C081218604982B018D24801A0214192F08B39E091021C04841400E1AC0444B11DCA
-:8034800028214222891C241284B882012C09A8208201189410C8184148001004188E4460482128004188C044002B42F06A7A142A348125084B425F1631447395462F482C94224242259888E82ED88E444746497846E448F1889A8542427444B2820AAF2852884486C884297184A48986247182644116F442486F85E6412922048B84188F42
-:803500008122A9A22F45A81149A92612FFCC0419F2CA21871213518848E44826D4293128873B1FA2FC8AC28B848A342C81228CEE84051E884524D882A42281C7A22E2447C24F4CC9881283A88488D088A4868FA4188CF914968E16278C1E988F48AB99184F4BB8C4989CA981F1822296C44A8E423F2B045E17A41B114E644AD2C8924824B9
-:8035800087A44E282F28DA81788AD181E14A2427AC2C4EA88287488F885C2C23D5C6F8281485688344ED5888308C891472A4E4865288A88FA8A4622934A4838818388821C1A2D04241FCC4464D4226089A9984F7EA14167422410C8414842C41D82441C8118011845384388001420080021E24B0181236184112211220011A04001E4845E0
-:80360000022001124432443E48342648648342BF6347F14577428F82F13D7DCFCEF26C2C87849D198FA3F79BFBAF25F7A3B22F1DFD57512F41D144BDF8BDD4E94DED46BEB8FF4C444F81A1888F88F8486EAFC1F118189EB22F2DDC22F986944F41E1A4F486162B3ABAFB8888CFCBF3D858CFCCA8998FA8F8CEC64F46BAC4FC888A2BDCCDD9
-:803680008C8F84FCB486EF4DFF8C266FEEFDECACCFC8FA94A44F4FF92CAEA761141F35D4647538F83D3DCFCEF26C6C87849D198FE7F7CFEFEFCEB6A2FBD2F47F1454424F44F55C5C4BEEEEC48F86B6F8FBCEC44F89E929F888888F6C5CCA4D864F29F9FAE22F28FB879D4F41E135F5861E2B323AF79818CFCAF2C848CFC9AD8885FACEC4A9
-:803700004F6AFEC4CC8FA8F8DAF8CD1C8F8DFDB4966F4DFFACA66FCDFBECCF4F6AF8BEBCCFC9FBAC9ECB63141F37B622F624149F93F368281FD6624497D1AF62F78FA78F66F6BAA22BFC3F34FC4EC8CFCFFEECF4CBEEEEC44F49FDECE4A9EC81F18494A5F86EEEEFC2F22C2E6F23F2EAF22F28FA968545EC857586FC9224AAFE9898CFC22E
-:803780006286CFC4A499CFA8F8CA8C6F46E74CFC889A2B74CD9C8F85ED69FBFED4CF68F9CAF4EF4BAC8A2B99CFC5FFECDE8F494CF165573F227336F439398F8672697D44745DFD6876FFFDFFEAEC9FABFA86593F15F54EC8FAFEC8F8CF8FEF4EF4DCDCCF4EFECC8C4FC9E9E8D98AF86ECEEFC2F2B43E4723ABFE8EA4CFD9B894B941544643
-:803800002B21BA3388CFCAF23858CFC5B582F8188AEFC9FDF4F4AFCDFD989AAF85DDCCF1D8D84F69FBFE54CF69FBBED4CF45F51A382BB94F4BFDC4C48F6E0F41702401418C54148C24A2482282148E4800801488D448225848824400109884101688082B8200848880084D820000842008402609824482EFE3092E431008C02800A9012BA4
-:8038800012D028018F4421E1442ACA14A0940000611A021A2222D182284122018684014AA1216112C11A84280882301481D048A84181B04801EF2A013CF41124A5F3112C83F4112CAF34D1C1F24A121D2CAB9419F24A9151AB9443F24A9143F242B147822F14F934484E914FA2C4814FA264154FA27498F1244A8F5DD2A6E449C24A1F4D6D
-:80390000D222F4912485F2912483F49164A3F69164EF24D1C1B66A9921AB9453B84A3934AF4439242F64F9244829F934484CF9244A2784E012C56C3CE541E214E141F242111E2447141B218F64F8116CABA44B21AF143834AF147A14F842A147822F14F936484E816FA2F148914F82F848A12E1A8F5CD282E51CC213CE218CF1C1282CF5D5
-:80398000816C8F22B581B24CF1916CA3F2816C239661AF46F91168AF44BB95D66281D428AA414ADB84D442DB82A4A42D58BF8D052088040000004004000000000080018800004001000000000000000000000040017F760B101208841C324A84A3248208821088C2148008442200304C417082149244814100104202408404002968818268
-:803A000020181402235128884800FF9A05A029821001100441424008008480544810841808101208831482845228860400442041882801844048440844414A4844011C09C79E00231988444822048934244308830A8012044A4844028812E0C801816958284299145428830823042120C14882187086981826486488644445A2C145788226
-:803A800082C49112AFB60C808208141912481C024200100889014048342440082C440490424480024400400444000000880000004001002F5206411222202201118110022400495428400400004440542228840012410000001064812001840060811884292291282004EFC6468102164CD12401882412C11A12084461A44B214483032E92
-:803B00001C1008246426189814248122002C014901C9312281A141360C1628188881112442E4810412496182C13F2C45C124121A426143292108A951683881240085943480018C020010722258A23614188A224164212001838102E14C9118128901001280522C2E18E082C1142E4841EFBF0C0045080040010000451284542A418D24C02C
-:803B8000144008444144000000001004442181406842008C188801168C0142120040F86D49C02C29618212604200106844128C0183524200002223010044810010022240088061421880912C121823D24881028450841490282A0118C13F330283011148C4A48423791408C429024921A282901C88161862244440420A8341480890128A11
-:803C0000C426814008100460428902C02444122A6111184324048C11044F15034024512A1200822C0240080000141001840025042C06223044410000000018C110888821040010C12118180042F0DB7A4094122A5182C42284128420942812494128021D1CC019A014415062246212401812A412482C020044124444C187433212004118F2
-:803C8000221838428B241289315444CBFAA0124485219112C425024F22415828128140328400889022840050848125982860442480480490182820911828608823E2810410285148C014122800847F89072002008100C40022000044418184008484008424004008001008104808008100444460818122C038008141AFE906262241148895
-:803D00000100214841400426189822400400008180028400000084002400400882188100000028001024F21AFE00104C14481448C444440044203224810041104442044902440021802242042125420200800100181822222A010018451844F83161105448241602008100484480029024400C00450884400884400C8400280000819018F0
-:803D80000010180812C901832111348862002E610000254818180C422002400240480422200200000000008100440000814112001200122818440012806481EF1803844183024444484484C400804218240421844912843228211024120410080010180481000089480832A80084001840C828484FA90D8C22014C820C00A02440C4682811
-:803E0000100820040021002828008100280000A48100000088008C820800928C024198282F420B8A218881011024028120024400000041000085160441402812C822400222200280012081011200288902118C0226013FEE09462C8206258412120840481482022280024429429826A01280480C0040014008294404800289024024884210
-:803E800008821200201202CFF60E4F42B3A4D144618144848489324C4A84024100226250C4442D24848C421A5824836242850484261848124412481408812212908898C0148988C83C8BA28B33881F4281D244F22C21F01D62807482F4282A2D266F8C411442444C4C2412183428CD288C322421C52812342C2228224554844184C18128A4
-:803F00000028842652228508C01C1286088436E84121031658843018967868C88D3E6C2FFF0DB01802C911982CC744458A942C89847262042D2864C544344822412644564884CCC2285082100226E882025062A14423421818B8280183B118810889313818A0318C92188015E83106B024012B120000840000400840042880020089028142
-:803F800010082012082821282128C028C028E0880200868802281289024480F2B5B3A0763AD3AC23F1D2548F22F24A448B22CF84F46C6885E822F24A48451622B244F42C2E6FC4D4A812528C8CF22A2AA3F22C26AF82B22452CC508826F828282C32222E224F42D266F22424A37228C8284FC22322A23B8F83F3889C8D188AF828188F8914
-:80400000FB3C148F8BFB2839284B22FED48F83F287ECA0767AD74CF114448F45F52C26AF44F42C24CB444B268FC2E222F24A684516F224244B44CFE2F246442425528E45FC323A23F2ACB26F82F224A4450C7021E1826232AF82024FC4D4CCA26222228CF224342E18224F43B338F3B8BC8D18188B119AF934148F8BFB28388D3A2B22FEB1
-:80408000F82F87F78FA1A0663E64CFC2A2238F44F42C26AF44F42C24CF84F468688FC2E222F24A6845165244CF84F42C2EEFC4F4282A2B22EFC2F228288FA2732AF82CAEAF82F22C2CC55C888558988D288D2A2782D0447424D444D28852888782CD3C8D388B998FC1F918188F88FB88988D1885F89898CFC3F198982A9118AB22FAFF2810
-:80410000185FE8036AF63444C7E24F47F2CA44CF62F24A444F42B24CB46CF628282E22AF845464A1C5FC4C48CFA2F24E4C87A26B22EFC27224EEA27322F81CAE6FC2F2AC2C455C888558988C7229FA22282E22CD44E7E24AD28A52888782CD348D388B998FC9B918B184AB988F88B938F198B8CFC3F198882E118D18EB228FEFFF68581F93
-:80418000380822302400000020020000405848C024902880022800100820022220022284222022010000008481100842F0A336901412201102008144000081805284100400000040040028000021C4210000200281008022822102C024703A0A6F22F51124AD121F41B24AF11124A7241D24AB141D2CAB9419B64A19F54A924782AF14396C
-:80420000242F547924D81AF924481CF9244A5CF8244A1E214FA264196FA264592FA2E449D2A4F491242CF49124A5F29124A3F49124A3F48124AB141D24AB9419B24A19F54A9443F24AB443B34A7BA4F842B44F82C4944FA2F447A1D022D181F428521D2CCD121FC114DCC194121D442D9419D6629B414EB243D27889C4934F82C4B16B42A7
-:804280005CFB22588D916DCA8F51D8847498F1264896F1224B87594D481F89D226F491688D421F4932481F49324E1F89B24AF1812CAF44F19128AF443391AF44638BAF4431842B24439932678AA18E5AAF840E20080000000000000000000080018800004001400848000000000000000000501270B2050024180000814008844048440843
-:8043000000200241001004810028002400414004801104200900128021022880F242F700820060430090240000001004C41004004140180221000000000000000081000000840014814F3E09204C02200140C82441200200844110443224200182400E8110010070420800440018444120030000122648021416F8E6F2000012C02400003D
-:804380008110088141004008004110040024002800004004000000908800800100200222AE9C00000000800100210000800100000080240100004410018281000028008004800142220040F8881A00400810044100000040441804A45048124422EC02C444000000100221000000000000402448042840F4BBEC000000444084010021008C
-:80440000418141181052841241224722304C4C01000044241424100800800200008041849C242002C137510040080000000000000040080000810000000000008800000000800400000000C03200411004000000840000000000000000000090124400412100421280210200200190288001008F6D03800121702241081048082121100A31
-:80448000280000002400410041004002000000848160810000604200008F448112F817B6000081120081000088004008402444080000200424008001802112880100100284002400000000FF140C0050C218318181004038820021842840841408400240840410022961610012288100816021121008C012220020E14401F0E5410016042B
-:8045000000280040180824008400000000000000440000004502202124110883020000449028008428848FA105000000100800100100000000000000000022200800002820012002004008200100003EB300000000000000180000002001000000400200000000000000008200000000006F4A04000000000000000000000000000000002A
-:8045800000000000000000000000000000F04FFE00000000000000180000000000000000240000000000000000200800000000F068DB000000000000000000000012000000000000000000000000000000000000F0816100400100200400000000000000000000000000800100000000000000000000F09F7A0000840084004100000000CB
-:8046000000210041002400008200000000810000000000003200007023010000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000041000000000000000000000000000000000000000000C71A00000000009A
-:8046800000000000000000000000120000000000000000000000000000F05AFE000000000000000000000000000000000024000000000000000000000000F0F4A500400100814800000000440000004100240000002400120000000000000000220000F06B1B000084000040040000000010020000008001880000000084000000000000CB
-:80470000180000F0339B000000000000000000000000000000000000000000000000000000000000FFE40F0014000048400500800444001002400400218001882810021880088400008042080000280000F0291D004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A210
-:804780001140C4350000000000004001000000000000000000008002000088000000804208000000B021070014000048400500800444480021004400100218808802218001884008000028840000800200002F1E0D0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000001
-:80480000000000000000000000000000000000FFE40F00210000000000800221000028000000280048000000484004281082044400108204440010F22EAA000000000000000000000000000000000000000000000000000000000000FFE40F000000000000140000000000000000008002000000800800000028840000000027E8000000DD
-:80488000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000002800000000000000000000000000FFD70400000000000014000000000000000000000000000088000000804208000000F0B2BDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E
-:10490000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7
+:800000000800218100000080020028180000000000002C08404208460821000000418B662485B848A41442001012014556446B222222180080440245A2111AE349282808001111118558888B44424AC1A20000504445B424322822428488002450241A9148405288A04420014002004544A82242408404002121411A018A080040511200DE
+:800080008528A84420C118218840125844422B22000000212121C7C3001245224102840010020048109888000010046082492204000080014188801822080000001810084800001F930B12003022901200008180548280040000000000442002000012180000100200000010040000F064BC40224154132532122F2121120100217048A84C
+:8001000044428CA8454800104404004C2402420020018A81887882022938822424A124850858295484480000F0E6F6248001122845025022259242A1854208904281200428004122261814022B2300800812208822216128888004A13042420012208802411F31022311E221C11200812502400284872429C4128141008210442492242873
+:80018000261494280024008061411A219884A92142020084465288248189084A041004E764F026222F21E222B11221B112012C512329F812131F31B189E989F848888F18F44848421F941481548985F844488F44F424444B244F4222E24202284556442E246F22F212222AA1191AB89229E828592229F812131F31B188E999F848888B48EF
+:800200008F8424E48404488558884F84F43632F0262265A2123A211102142512D232F1111119F8918887818F18A44C42141501848588F44844C5B444A226220050424584F2262265E222A1131AB88228082512D232B11191819E8887818B48CA240400848588F4851800000000000000000000000000000000000000000000000000000097
+:80028000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000A0
+:800300000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000001F
+:8003800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000009F
+:80040000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000001E
+:800480000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000009E
+:8005000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000001D
+:80058000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000009D
+:800600000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000001C
+:8006800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000009C
+:80070000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000001B
+:800780000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000009B
+:8008000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000001A
+:80088000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE009A
+:800900000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04F17
+:80098000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000D8
+:800A0000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000018
+:800A80000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000098
+:800B000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000017
+:800B8000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000097
+:800C00000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000016
+:800C800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000096
+:800D0000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000015
+:800D80000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000095
+:800E000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000014
+:800E8000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000094
+:800F00000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000013
+:800F800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000093
+:80100000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000012
+:801080000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0092
+:8011000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE420
+:801180000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000000074
+:80120000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000010
+:801280000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE142044C9481CD484042A1434142302440000F018261287248282842748822981D14811862132488364446084188041088C143414221222822C424442C4249A02128331161F980B2D419D1240110C4786AD162CB6C1721421E2123830
+:80130000845F246A4269D26A032EC22A297118C294482B436C62288283E982FC14C8882E8283A24210D828C4CE46346C1E262CA686442241C4412E4A49C2321225223B8A8AE484F832391032480044850444214B841820084621624284818246280888445200472141186E18822E8249829648004304498211329200418222438242042853
+:801380006089888CF464C814201162848190482B124C321335041482A82100322944225128CC21A48226241812A824490846C84800128D428A1102E0442246840181608400328E122821469A844F71024214001C044C02422822100441408213A2211200100220C18882841008000040684410044400004002231112820112F09AD3400196
+:80140000911120048C04002822411014421404290A8A01882582110218822004001008106884660880222242542440244204820012AFA20F000000000000000000000000000000200800000000000000000000000000B739D0214412282301A12D21169128A3C4A84224644D482B42416230824A82E19842024941E3818A21F51842001A8D
+:801480004AA48183684919F48822422AC81418428A81114882283134822C8838442A1564E92410245362818B211744242810011440C82130328A6141260C9044814C04844562C42A388224C448A200265868449382254C988124882CE844312C21299C1662842841A47E6870430227221A321A38412D21292222A48200A5D4823422226A6C
+:8015000049B2888286F1812885222451388F49D2846525830184CA12A418828BA1C3F48A249B245AE24431184E818229318823B52698124391822AD482A8424C43F227C8004489410484A714C01184A5416814005362244301434104904410440410A2282C0C61122A0881441410228808208108448424AAC41482102454849F9E022302C0
+:8015800060412144204102A0412C082111008148141518588544001008122210022200122C28081AB24C0822122724304284103442800181229DC1144532112F525112172119E2118256413C511825C9119486E149E288222BD268A1144CC6E490288561851CC4246F86C828161CB854B841C8112E94544C621366CB46C0228981A44817CB
+:80160000818C81487418B2884118DA84922C4281AF1902211CD1124201221152443951288384412188031038141324624851843048195428A63418CC426A4990212210A428254984E1821808822724A488448143582881406484F094A4146C026C6141273145218312012531113C481863588B822A89628423D11CB44812C8249112302469
+:801680008984220148C681319454321CE128C6422846941262589C812144C81287214270343828C0285FA70C1C02902250481116C23842801284C51411A8424D42841421441C1604218D248613880283F3281122452125012883814161814014087144436144444187424008219F18434164411342140E2922622434114243185182901A52
+:80170000BC611147229821608182D42C81A521222503494841263A4245592343E142388224502480C61C228721850288812444284C3612DFCC0529C1224361918011545214811213115882100622288044581820024022048339681042A114282B822210D248528413A229190321822082723882088C01A0488FF50A7961431F4192362171
+:80178000C391226D218D613518E112417851921465B228D138371449B28244486C924C4A692136F48352223D982E48322943B32515328E39A2124F88938E154EE94268138B428CD1146881AD122A7488D6846842AD14898264241F7B0722105281C150141229819412482C48181881084E23841C011448184D82888C84428812728844C8D3
+:8018000024881AE2120165022A012A2111022502444342240384004C22F8CA6A80A421246CC12424221816682122248240084A08422241118B34004302A249014D68C941280112232121B188D32231185048883618E8814434142488A400AB2189D22818F8CE511014069112830181282882830181414311125C1480888DE8A20C14A81407
+:801880002088612882821A021C048C088B48803182280014A160838031441248004B242F4B02494203281C13012002609244551814488122183C29008013217248220A800500122817214548E24412544810644E81008C440400280081245F5B0100142446C4248092421608884601398802422110E2C2488101A487144511612711A21EF2
+:801900002D8400828382220C222902186012211682988A836142824C8168441E44F09F744001C038428C2524014444488004004D814068241E281012E888122108845284442244004149221188C134841784002DA48608490680A12CD0420885F169178004811124174281C344223868448602A430428126624841142F8881229842002056
+:801980001819C3B1124E11C81284302AD0820800400149422411848312B2182C1112D28B05244412003022108816D24102182113CAA11246C54292491484080070416814100489882812044842884882C886E4817C52E42124345280B188C4C445129448A0243F48021932112501850120262508428304821481682A280440112A84810410
+:801A000022200860164280021A0838448D41188C02294C082C08AB484129C288A01A4186F4E96C1484281A14024818008C244814E158124188C2818130485042903BC08846E8883111216214206282B0241403112220220536041E21814843820C00B092047FA70C46E14252282F916112763B284E785E184E4CA968B414C61CB528C86154
+:801A80005D1C1D2468C5A44B8D218FA463921D492D488D2C1A45F142384F8313F838A81741484C49F8242C5AF56CD244BF83026AE1A1F3D2118189F95E4876F494184F8929F212946B654A7488BB46B426064B627133D125D24DD6478261638932224B2C1BC3DB843553422D25A3E6129E88A3F42312496B452AF84222832266143F4AAAA8
+:801B0000E8CD43974C2D38584A87E311F429122F21F9A88833F16E184F28B544F1194C8F4CD888366675CA962D1AAB848F44B2C26DA8ACE8CAA314874A1BED1415E631C11183B25291582B24812AF498B22289A248C9F1888917A11B88872C4F1ED4E4E88C7C49FD859A2398888E349D211BC885F9511A1389FCB48486212ABB22F21424AB
+:801B800093CC228E289A42F4A8884BA82A7421E2B16D4582C9CE242E424D244B268B18CB814F41CC2ADE9A006D118425415834840024841C41C817822C41C814C016001130828041140131202204C011100222488812224001444082442241048110681C24694408A14B649D273D41CD5418CF61B282B198AACDCF2CF49294172133F1489D
+:801C0000A19EB54FEBFB26642E38C2DE8A3F14E482E593F13CBD5FCA7A91F383818D64FAAEA85F5DAEC95F5CFAA9A33F5B26FD81A18F8AFE21358AF84125CB241F14F9818955D188F5A4A42BBA4D122D82AFA2B26AA6B28F82F32C2CBF5543D222F4465A259242421D611D414F46D788F1ECF44F49AF21FAAE5D8F89FB99881B8DDEB5DE99
+:801C8000F14FCFFB2C6CBF8AFF51197E381F96E68AFD3159DFD7FFB5BD9F9DFC81518F9AF774EC8D38DFD5A6A84FC8FEACA85F537258F83161EF6BFE2B23AF8CFCD1B5CFC5F361B11F9FFF9D9FAFCCFDACAEABBB4F64F842C2AFABBB72BFEEF2A8B8CFC3D3D1091E161D4185BA2AF268688F22D39BD44CF458684F6DF28A1C9F1AFB88A8BE
+:801D00009F2DBD8AD828F1CB888BBDCF98FEA4EEEFCBFF6229FE518FACF7CBC11F82EC14F4292D1FDFFFA1833F8FF93865BEB88F88FAD5EDBAFE34748F63719BF5C828BF9DFB82B23F7AFF1E38DFD4FAF8B44E899F99FB4545CFC9BDFEF9A2B26F2CF51692AFA4FF62F82B728D18CF42F7BF4C141E12BD76AD1ABF87726CFA2A3EBD69CF68
+:801D8000C6F7787A6F66FB3AFC9F8AFBC8EAFFBCFCBA9E3F22F1EBE8DF8CFEF9FB6FECF81A5CDF86F6F9D98FACFFCBCB3F83FC29498FDCF6D1FC9FBEFCF35BEFCBF634BC8F8AFB557DAAFB2D359FF1F11B1FABBEBF1FFFAEBEFFFBBFDEF74DB58FEEEF96FAD9F9DFDCFCDEDEE726EFEBFBB6F66F67FDCEECFAFFF468CF89F96C7C5B9A9003
+:801E00001460122082E412A1412220A24880446488008524B8480289028B24A024118D243048412022840100C0484D1284411260881484448AC4268022F948249244826F6E068683E22211C112152404E0881402341308F042A1821CA248253495422442118180D22189A29281988280E23269C82E12808832288266A24818922542886365
+:801E80008864C024228344D1FF074D421F41D23EF11124E7341F41724AD341F24A121D24AF249921AF343985AF743924AF7439242F747925D852F925481CF9244A1CF8264A16F5274A96F5274A96F5224A9E242D4A1F49C2421F49D23AF19124E3F69124A3F48124AB161D24AB9419F24A9151AF643924AF2439242B944782AD944F82940F
+:801F0000984FA2F47CDDD082C464581E2C421E2C23D4C1B248D141F242948CE244FB8428AB1443F2429147824E91178229F92748987FA2C5814F826D111F82641D57A296E592645D4D4A9E2C9C94618DD39E24C71696744AE149762AC144AF549921ADB519F64A9343F24A924B4329A84229F92648986F22B5680A8480040010010000283C
+:801F8000000000000000000000004008480000008281000000000000F0ED71403412257328021901802152821A0290516E845E8249B2146A8218284E14828502411D2C50216C4344C8188222206A58935941548984B48426220850484D828249A486CF220841004FF34791221B282E1411484644849125511A421158C182100884601C93D2
+:802000001471410428460832478489E482C8444AE21224F4811481A4688394421D2481842B48BB34831186941881A800E08864984CF21525C0265E22119722485C1484912145129C112255B811E8446AAC4CB21C18C8434E281E41D641229A442062142FE27581CC448B21992834C183988C1B49745483048F42986699BE2811944C8919CD
+:8020800068468A92282592C8E021F2281F1012F124120012004991212A81120842800128229811444181107825285184201288A42422162412312A8C24D4413248482C28410210948282424308418918F4329E2002201118C11210A44981802808C026C081A084114E2530488428E044C21880311841822C4894929092004C8448186281B8
+:8021000040A814498482144A882A0241AB2614D052E22241C67164193214267A2428E91148C857C6644490988163C424488668C4863442E1393219284F82084B86837942942488C992281726882E9289A8424B162A24662198359C1812882E449A120C4C4CF8A2EC1424442E1249D18155412301C9B24AA98119091D142B844024892824D2
+:80218000028D814688984884222E1936684A124F8886A1484968488B81601923E823688CCA92444278241E82CB144528A284C386210A4344F8FF1F8032214022023CC214C02481C088C841436422849542B44498416644744C022D2425C144100812CD8241264262428332620041B0183222811884141A844102A6182C2218F4A84C30143C
+:8022000022118042C1A42A5142111314B18441CC6840223212285124D41240140594286021488F117264B14251826400121074440826D818C8142442AF420132224890824078BF0511415A72220427814039284225281244815384230A11A012ACA2141D5440282124082A41184403303883C1624C938389128962224C8804221608C1A7C4
+:80228000648426C4184C012B298F3204105286301441824440C43284002428304822101204A0242621723412042004211810049110C814285084111821614180094B81122283944C485F380D5311E6C17222E421120185544A43B4587222085416D28432228D42141011D4149544685413B114728788A212484D42F01661182D2483712AF4
+:8023000051422D918991298147828718872912244F8174129418AF645284762421C54CE6F868440028250141163C241B212211251181493848C0822238222D342618180126C8244800C01AE08201292411042A413824444306239241244160824C28810B89728408F0AA5D00434224020084488D24004354A2A021190440F1A8114211408B
+:80238000140400412342143644121A1211F1211411E044684A282022C218482939448E684100182082F26B24E045C2111009834424846224488140C444858431482C363410E46812082121006648A2412A5421482082064A2201818218C6C21282511488A094622088231CF435F55024244511E4228484042684042420840827222041082E
+:8024000081414228621C04282148498834224C4612149848204C1CC888422024C488444A0242824A2254484644F8C86C00000032812654820022818C02002228242002430281442E489460694001111A14480220128221C5141012044224182222004A01428F5303CA820200115604184148800649C411424981A4921C44014041444804D1
+:802480008342818101A5420280123812804A8822088A14A248E0846888424182618225F1A31F24182301D1466881224242805248A028222598194608248C8A12411804904A421122424C4224C24C49C228124C032F1842614484120043041A18A4121A28212212026FA10F00120024241648DA28422454282888424140324144C1E68AC415
+:80250000422C8202214443811202141D2810460200481288811E84181C110118008890882382F8BDA61042622100282844212521A2422142800428914CB4440184262404282218B042880A6218004094422B86998144642C48135C822F8178220840088B69848A4424FC27DA4048944822244416AA21008125048E268722176241189088FE
+:80258000904123042981F4448A8024048114A164D4D042142A51414A32145048C0248032144313040032901243F255B2E0426558355298812E4C4F81F1184E6CD422E42442784A4CEC6CF8562A2AF4384883344C2F57F6286CC8C7444B448D4233964E42C7E26B817E54242E211E211D41702824F12A4286F2CAC5DB53CF85A8418BD229D6
+:80260000F8488A1D564929A8299A810589A8854EE168ED1E244B2165A21119C262B9F322626B12239224228722226994269D11A71169023D1A495814CFD85282222D24CD6CA436EA14E45AD624D242F4424E3F46F53626455632AF2662514E84414644F4483C211F259516C71D914F25D684F548A44A6A852E628D5C4742C11D857042A2D5
+:8026800033C5742424247548A4248F8473699C4E4AC6428F2CB828E442F445144AE133E65BFE8918137461E222463764246A9241284E122F88B87412542C4AF12A214D284D1D4AB333F721388EA8AAB584682CAAA2492D882F5DE642F948842E48A24BFA9AB1A4E228E14EF872E600671284434248024100840044844048022840044421FD
+:802700000010820200400100004018042041424803002001504812F0D78CD024F2213DFF3252422CFC1D15CF67F42E142D4815B128A266A3B648FC8AE42B444E42EF64F42321BF16BE922CE248A8631D452B322B224FC4E423538A9AFD984C3E52CD4ED5F5514327222E225F53F37D6F6F7BFAAF299FDEEA4FE76AF94ACA3F38FA1A9C9F80
+:802780009CFD491943B6D4A834CAF8CC9C8FAEF5CCE84E548E815F210C281F94F7313329E426F66767EF45F46C74CF65F54D674F42A266AD22AF4CAC882B442F27D766F323319F1CFFA2F8AF82B4E4B872F72161AEF42F46F26CAE2F27F34A281F1DF7B8BD7E56E5FF5D1F1F36F26242A15F71F51B5B6F59FC48899F9EFA28E88F6ADCCE36
+:80280000F481F1AFC2F3C9D99D394BDE4F49A964AAFAECFC8FA6F58AA86AA6D9BB242429F621719F32F22A289F96FE3F37EF65F426542F84D475F228648F86D428B2C2BC8EF87B7B8F85F57C141F13F7C3F12F89FDEB8D1F18AE721D412B8645FC444E2B516AA4D98FD1FD32568D4C1FD1F155455F42F421225F43F37D7E6F7BF2BBF99FFD
+:802880001EF3E8FC8F6AF97A7E3F3ADA8AF6CDC9FFD5F8E4344F4EAB345AF9CC8C8F82B39AABD44F4CBB8844D224F22874EFA3F36A2C9FB656FFEFE5F424588F85D5FDF2282C8F8656A86F8CFC8888FFB6F76A7BEFE6F323331F3CFFA6F9DF9EEC3AEE82D711F472E4E7C4EFEEF21A5AAFA6F651F58FCBFB7256FD2C7E3D1F56F2254495E1
+:80290000F27B16BF83F516C5CF9DFF79BD8FCBFFB8D6AFC3F7B3F1EF81F3CCD7FFD3F1E4744FCAAB7DBAFBFCEC8F87B7DEEF47F7C4D56F470F43026302226022844502260224864822818254289285044C0242801212180129082302185012F0261190844888004022412188220812460142F0581700110046014148C14C06004188510063
+:802980002843C821481CD88484024426082A4404401201204208448322018C2202A9010018842082528420F2984EF024421F41F22E131F4132481F41B24ED141B24AD141B24A9921AB9451AF443924AF1439242F147924D812FB24485CF9244A8D855FA264155FA264192E4ADE252E4ADE24ACF4D1242E431F4952281F4932481F49364EAA
+:802A00001FC8B24AD141F64A9219F64A9255F84A934B42AB944B422F44FB2448A9F924488DB44FA2F44B2950A24CC65217C1421D2CAF14B111B24AD141D252D981D64A9B4529FB24482F147935D812D984D412F926481CF923588D915FA2EC1578256A182E5AC6F5241383DCB4F1D12847321F89D42CB49152289E6C2B141F48D23EB19198
+:802A800056421B685CB381D658E182D448B91494A24B4A29B19684F2A25ABDA9608882480000008200100200000010021880080000000080040020020000280000000014A02C4046410324411453A241001B821281144962212A34814031287028528528253744212830162C12342212212240682262288C648830884608484942341488D3
+:802B0000248120E41478EE07429E227014828402401111921860652C4401805162384880044624122826146484818984192252A143A2244481887041825412241516AC818C3C68B04C0143C68183F2853B7044B2C151234381942680021512D4182AC25619D4528291228E1125C21289021A12E2480246B82224445441848D428F216221C9
+:802B80002889D2426686288B2428488861392854244E28AAB188B43C2468A1A42E441CA883FEFB002800214051414E1100121884008004411C82048C54582CC4256120022D58286182001400442182811D484284851241144404904400428CB4450E430241195222151408241142400100211188114A0210110844204418488202402201B1
+:802C000060221618420828805412704A4108001068824A02DF3E0F112607614712421C331C30443601D018A4184819461CE422114818584826C225814964421C322481842A141207167988014681416221C28502A400C82D882F385184D68A8201F0B89120524110121201CC41324452406114802412C8841F2261828484C100412002286D
+:802C800084A9A242212524416818608112809162A448A13043C22D881C41A8C1842200AF7F01512C42D441C2274674310810611200819224191405200440C12A4D218143C44499120C001011C211812833144218820840038484308261A4228CA124F066E980648245186442115481480050C29128E12361440060613014C4141800406820
+:802D000052616D28255442814782002189166C11842121868C08A1811006418301219EC43016654901421800544604661184946250489179D28664128552818B21224146D248618289522185C12840C112812D112E411E281C218851822186082524324882104848088881A9D2BE0F00218D321400432212F111288100C9A1120000000069
+:802D800000512C4442044800200450241024C1214842C01118A14160228A2189B1188C0244BF634F62413742B01CF22244194135244C54411E288D238074520C83411BC5441008890254196585A722CC42638426185A5256062119D282D314B198763CE191C44A84312F881148CC8822AB818648688D8C0245F84BDF8004E5011400842686
+:802E00008144811458812447832594442C42C821435118418D244014061078244234241002CF1241440200250288122482460281D0422141241928E2E101200234114962211400A484220048001048914419C52814918086342A906A0041441825C1114E2813F1482210C8124A0883042024223444844100F01D7E1422C02222121024223E
+:802E8000243646228502142830242CC7212A24C226C048281A44C824186811801491410042208421044220243A4282908800428289948848AEC75021C44008124844811414A14820060028E08441887444022D124651141E484242A021150480020068800640C668211C9C42439E424282C8100412BFA50942111116242404212004002C6F
+:802F00001251422B41123414212100844C44022603160B00125021910024504342818119018100908A182443840826D87906464402214E2480011220011A4408304414531444410427274800421321144181044944450100212D44454121848CC2C380542248D08412120282282F8E0222442210E24122C42C2814892244041254124904DE
+:802F80002C8442C821144F12F12441100494008181288422100100602410683844240020028486022582F83D75141200001425440144C026A44E21A041143012001314440440014112208262228422813260122E113224200A001111222800412848A324B4A90E43691A2011144861841422100143A44228444844680000280000144018D1
+:803000007844014240228204445081242018018288442CB848A1280044F0116B5081C041412220022306624644C12A2081C23100841312128101A81C528210229442221C64A249A1524001A01222825042818A1211928844006882239488EF450612473826C2116E11223E16A126C8212E2289D23A51843B722E161E2426741231269F8165
+:8030800026443422651894312A52BCAD21BCF443488D182E258D24157511F63321484813F4241A75742298A8A3B82251319F3878820144E14B424B844B2281C48D48CFDE0C1754A215712A56421F857146D141F24261172446485884B5423144414E315F22E13422D498D611F21C6599F42844501517421D581B34344AC4481B542E42853E
+:8031000081D11152812926413141426CD828DA8A12622426A284222785A9E424AC888E422E32BE37144B72BD24284391644D24484F9284E142D449B563A4644A24F412614E515B414E649974227127F4744217246E231F15F242438F64A47556028B222A724552144B242A438AE116E233F142647AD618F492424E481F1CB4C4AC4419FC30
+:80318000C2E4AF8AA6CC8F4861AA27484E448B84CAF83E97004302C1302C4003404843480300441224400428504800298112120830249016200218D02441A81284188418008464128D250010F8D1981455D377F22E2F6F63D284F8352E7FF3F32C251F15F34444DF93F329488FA3F14F463F25F367173F55F544762F655576BD495D4D5F70
+:8032000056E432F46A68D7F6777627148F95F712288D688D6A2B664E6A2F46A4641B321F2132224AF271332F23F635629F83F428D83E72BFBBFF98DAAFA5B512F7E462C7A2AFA4F47A36AFA4B2A2F484C4CD8C8FAAFCEEB9145F71F14667E7F2EFE3F466CC5FE5F53F3D4FD2F251315D25DFF1F129288FA5F74F4E2B154F47F151555F71C9
+:80328000F147576F66F46A48F5FC45452E1267E66FFEF867472F16F878699F91F34161AFA2B262F6486A7FD6F465611B773F21B322E422F273732B725F63F63B482E52AFEBFF2B6BBFBAFE13D22B116F26F62E284AFC18988FACFEA2866F4CF44C8C8FAEE59543F144477D677F72F23B2A7F45F53D363FF3D77CB252F345259FF7F56B4B32
+:80330000AFA1D3EFF453127F71F1535147757F77F72647BF92F62F6D5F54D631F162223F167A656524BF95F52A7B3F32F622632B26EC7222FC24277F73F7123223E226F273236B517F12F522422F23FE22763F34FC82E23F38AC884F6EFEA6E66F6DFDFABEEFE4F2A6846B88CDC88FAAFF5BF6145F57D755F62D2F3F27F27774DF65F53BC3
+:803380007F2D2F2B375F56F2515F9FB6F25A5AF5FE51126F65F553554F77F377677F72F669699FD2F24565267262FA62AA77763F7EF26B7BAFB3F36361AFA2B222F22C2E7F56F225237F52F733232B261F22F263736F41F56577BFB2F4F2E2AFAAFF13D3AFB8DE33BC82F864E6EFCAFAD4D6EFE9F96F6E2F4EBE46D484FC286A8785C01148
+:803400003026D01281F4241248268144C24880440220810281114C024431442189921210020000290114A0124022280214402208922882205848F0D55DF02441404238681604C422702801403842C0354924342121002285014C1204224088424844C124001428214489011896182A81188442485684802444F88332F024421F41522C1FE5
+:8034800041326C1F41324A1D24AF34D1C1B24AD981F24A9255B84A3924AF143934AF747934F842914F83D458F9244A8DA14FA27418F5245A96E1A2F5D825ACE549D2A4F591242CF591248D121FC9B248F1916CEF14F1812CAB141D2CAB941D28AB9455B84A3924AB944783AB944F82949A4F8294984FA2F4B9A3C04A1AD638B411324813C2
+:803500007148F21124E3F4112C4E961E282F547A14F848A543F24A9113F3489147834E9527838F14D8A6F148912E828F14F8251AD6F1231A875C2D11CE254F8271D1D8A4F19164AF1275819C189E6CED131F88E612D1C1D442D9C1D622DB84D618B92494924F83D4429844ADB46F8284F926523F5F0D2088040000000048000000000000A7
+:8035800080080000140000480000000000280000000014F0EE990010080040110881200500185110054240112194291722148C2241420442421181002014354880088211820018430860841283F4ABE64032812424B025812288021110582120120949446811001014044400142002002250523C6251250460323021403648308841812C0A
+:8036000002281428750A204C4A0249232298285084B0281411229219144354143448301111C66482542120114144314842134298435012695414466832493821A264830C8849D184C822248CC6111E28F7F440120100111001400118000041408801004440214261821424280000406412160400000011008100000048AEB1001604100625
+:803680005041222824110000100541004243428484022820842804001942214841081D48211100000024102211084241BF9F044032216B21197224A12821244028638145420291218C14D181145184904225C4443D448054812122811304003C91442C441D92414B242C24841808428484495448181588C928CF64054012512217424C82E8
+:803700001284121278123118412110581284418904CC94244842412504423C84280419041411114489449C48424AC24242002044189242164C08C845F8ECB2004C8162431021180322200200211141421414140025544268132402812012088002982D412415421153410088840040180418158821F216B550A42642712384042800210003
+:8037800015442201236824A641488802839482C0884A410865521820924410082592284400282608C8648200809821480010F294220080048434142884443129120428225082410024458801A082450828141400112C9428814C24048110018041EC12012522138404841281AD127735004480010010922832244051182012042334840033
+:803800004410180400220030224004405412282004860180040084112841824C046FC803442312D252C248142822A4441D22282551211361228A427A81028128402408C1CC4488722201C022114810584247861422204238818A054E11002B1287484862804144F27E4100441412002501218C92120010082449C4248CC4845048AC048481
+:80388000281800442508E04442C2240025421408468102502882240080028524384884DFF6090000903200212400101202200215022014120800101201000089C11244812100000010848404000000E0A94B01408141C141218024081611A42800A2C8822292C812228632A42215044D1245280242584343848401000026724502482414FF
+:803900002124A02486820482D0220C8002282004289024800200222242002A24021C6412486248422A044848400800484220041002110000008888200448A788105118241118004414100415021282103212121480048100288188001444448C0C00190828888B844440228804A02422218B42868202E0B70600004042010000000000286F
+:80398000220081220060182410020048000048000042002460820042000000CFE707288082C122C0221428C02800143B426120582141305122240081282851222905230255022400454283048024549440C44281C0420080045FAA021688211194812E1512188021842804121112281A6C1811301120FC2281881642014D48005843219161
+:803A0000142D312C219252C2868262222844D021623820982226C8292BA48302289B9814824B28C0212200282428C021002012128202222200134212092052218044050040020046044281144246C444002C04004214485D8D6096112A0518E032053342224244814221294C4622B1122C912A1CA4144C8484E48294414AC28285C188C06E
+:803A80004824C8004818F061822068463582022004852284022304FF640A1AF688241A8323F241233E313D322E218E2289824216111324FAC2222C027AA8476A632497A222484E4487126E41BFC676221228051F21D524C1824D12861A32828AF862A36D42AB644E619552277908A304CE421FA4AEA62AE41884F41AC71422862112E21971
+:803B000062423724412C8431221E81428642E118922222BA98A21901141CE614FC42A1666122464A42218484E841210E23314239061B54A048405421C2428D4223E422AC428C121A426814F0B6DD501113437131D521B112052231436244135211217AB132E82499C42F14F135132F18E618F3184833A2284F68D488F29121687F48532455
+:803B80001A6C244D6D4F845444169C3112425E44282F4444A8263C086D414C645648F04222A322AA482B2460266F52060084A048001C019880091C081448340000825082448412352859849A42A828411B28611B28B081429221100120025440020085010028EF75081F16F6353D9F93F23C3C1F25F357173F17B623F23131BAF3FE782A38
+:803C0000F3C1D22F29F1C2415F79F382924F45F9E3C17F72F2A3D11F17F729316AD628F2ED676FC1F558D88F1BFD7C622FB3FB7A9AAF2AFC96581F5BFBF4944F6AF891133F3AEA2BFF36243F3DF9C7873F28FE21228FBC7C4153BB7724EFECBE42F4AAEA2AF2686AAFAEB2A2FC48486AA666AE6B141F16F6757D9F93F33C7C1F3B7327F7DD
+:803C800063612B333AA32AEFCEF6A1B11F3EFF92132F3CF6B6B63F18F994B41F1EFE37351F3BFB73317E38AB378CF4AD5FFF5264982F9BFDB8AAFF32FE62C98F2BF9E2291F97F775155F5EEC2BF323633F15F5D5857E327F5EFA81C21F24F48CCF15F36B2B7764FFCCAE668FA8BC62D6A8F6AAAA2F2A5C8A6AE625F5AC56B061F4155516B6
+:803D0000F135151F11F716572F17B413513129F84A4C9AF851633B913F15FDB4B62BFE5F59ADDF5F53B331F553F19F11E92ECF2B1F32DA4EE4A6F6134B1F7CDD1AE4B8F6824AABF317915F75F386463EB23F31F1531367452F2BFF26A72F38FE23228FFCFC6223AD6B7774CFE83842AFAAFE2222AFA6F6CB8A2BC8AF86A62218AF4B4AF159
+:803D80005151DF51E511F155151F37F677572F1555333F33B112F96A4C17111F3DFE13933F37FDB7B72F2CFDD5F52BFF5F53F391913F15E9A5F9E8B38F36F679E37D4D1F33F3BBE39D333D4F9AE7A9B54FEC47F7D4B66F29F413932F27F3F2B26F6DF853536F5CE83AFE6362AFFAFE2323AFB47647F7AF8F2F22F28ACA2F26F62A6A8F2A88
+:803E0000BAA2FE2A282AE2267317061440011C012412000014400228130812281301138812011828188021941280011420022682840824408104C022800200008DCF0000122011022480210110021C082D82C08100201484024062442210845214289021904110011902004100006082212200AEAAC0421F4152281F41326A1F41324E1D0E
+:803E800024EB141F48B64AB981B24A3985AB9443F24A9343F242B147822F14F924484E914FA2C4814FA264554FA2645D4FA26C59ACEC49D2A4FCD1244DC21F49D22CF891248B841FC9B24AF88124EB141D6CAB941B68AB9451AF443924AB944B4AAB944F82B442F9A448984FA2F474F47024D2C1B4287411382C4C742ED141F42E111F41EC
+:803F00007422B411D44AB215561A3AD41AB814C4A54F82F4429565F848B16B128D912A7C583125874535F218253C7418C5421FC54298418915F148121D2CAB141F48D22AF181488D141F88F44A3686D838F3A448A9F1A44829B184B44231862B144FA8F1C4E6402808000000000028000000000018800800001400004800000000002800F8
+:803F80000000002501EFD404400400282128400200002400C2282100280080024A1204000021008092420000804411084082440244002C012008820000008002140000400822001100000024401802008044012004420020044200004814B0810C30C40080022800412810814202A084AC4222021A4221082820425421401A480280249404
+:804000002121003044A0421008400224244C4421F1E19800008200210010020000000000000000800400000000004220040010210442200400004F9901504100008002002800000010044004400284004002240000002004000000424100002002F043CB002A0114001001248420010040040000812146040000832402450121212821007F
+:8040800000000000400890281008F0D5F50016051400601200A12218000041400400A4D024048400C0482902354402201202420000002014040026088C02D0840120020000000000000000004004000000000000100200000000000081000000F0D821800200400114210000820050140000100410880100000000002800404888088182B0
+:804100000080040000F05CA1002614080000484242810000001002000011410000001004004901184228000000400400002218F0C5E3000020020000140080110410040084000000000020040000000000001008000000008F41022244818042011121420000400415441402400840112401000080040043210248228484824008814420DA
+:8041800004002200AFE3098002000020044641088218000000004100810000004004000012000000200800000080017F9D0B000000400800400100000000000000000000000000228840082800000080010012F0E1FC00000000000000001004000000000000000000000000000000000000000070AC01140000000000000000000082007D
+:80420000000000000000000000000000000000000070F303110000000000000040040000000000000000000000000000000000000000F0184D000000000000000000000082000000000000000000000000000000000000A043000000000000000000000000000000000000000000000000000000380000E0EB0F0010084088044100000092
+:804280004400240000000020010000800100840000000000000000006FC60B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000002400008840020000000000000000000000007B9C001001AB
+:80430000000000000000000000400400000000000000000000000000000000009F7F070000000000000000000000000000000000000000000000000000000000F04FFE0040410800421004000010040000000000200188002180010084000000000000280000F0A8C500000040080000000000002100440010020000000000000000000091
+:804380000000180000B06C0E0000000000000000000000000000000000000000000000000000000000F04FFE0040010080045400004840040021004400100218808802218001884008000028840000800200009FD2010014000048405588281082044480022100448002214818808802214818448828842148408481421882041E14800244
+:80440000211A01445C0300000000000014000000000000000000000028000080080000002884000000001B72004001008004540000484084041002400400218001882810021880088400008042080000280000F0E2D1000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000D2
+:8044800000000000000000000000000000000000F04FFE0010020000000000281002008002000080028004000080044480022148400400214840040021EFA20A0000000000000000000000000000000000000000000000000000000000F04FFE000000000000400100000000000000000028000000008800000080420800000070820E0053
+:8045000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000008002000000000000000000000000F07F4D00000000000040010000000000000000000000000080080000002884000000002FDBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF63
+:11458000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B
:00000001FF
diff --git a/xpp/firmwares/FPGA_1151.hex b/xpp/firmwares/FPGA_1151.hex
index 4d95bfc..5ecab69 100644
--- a/xpp/firmwares/FPGA_1151.hex
+++ b/xpp/firmwares/FPGA_1151.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1151.hex 4761 2007-09-30 16:46:51Z dima $
+# $Id: FPGA_1151.hex 5128 2007-12-13 14:30:31Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400078CE0A006AD6FF400078CE0A006AD6FF400078CE0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111DE
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF400038460A006AD6FF400038460A006AD6FF400038460A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511136
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200001AA1111AA111001AA11100001AA1111AA11100001AA1111AA1111AA113
:80010000110000002552222552222F21F112122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F112121AA111002F21F112122F21F11212EF
:800180001AA11100255222255222000000000025522200000000255222255222000000000025522200001F1BFBB1B1755777000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000066
@@ -19,680 +19,646 @@
:800700004F48F8848425522200CFCCFCCCCCFFFFFFFFFF3F33F333330000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F48F884846F68F88686255222000000CFC4F44C4CFFF7F77F7F3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337375F59F9959585588800655666455444FFFFFFFFFFFFFFFFFFFFFFC6
:80078000FFFFFFFF000000004F44F444447F75F557573F31F11313000000CFC8F88C8CCFCBFBBCBC3AA3334F44F444443F31F1131300CFC8F88C8CCFCBFBBCBC3AA3330000CFCBFBBCBCCFCBFBBCBCCFCBFBBCBC000000004F44F444445F54F445451551110000008F8CFCC8C88F8FFFF8F83AA3334F44F444441F15F551514AA4448F88ED
:80080000F888888F8EFEE8E86AA6664AA4444AA4448F8EFEE8E88F8EFEE8E88F8EFEE8E8000000004F44F444444F47F774743AA333000000CFCCFCCCCCDFDEFEEDED1F12F221214F44F444441F17F771714AA444CFC8F88C8CCFCEFEECEC6AA6664AA4444AA444CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444444F47F774740C
-:800880003AA3330000008F8CFCC8C89F9FFFF9F91F13F331314F44F444441F17F771714AA4448F88F888888F8FFFF8F87AA7774AA4444AA4448F8FFFF8F88F8FFFF8F88F8FFFF8F80000000000000000000000000000000000008F8FFFF8F88F8DFDD8D800008001000000000000000000001400000014000000000000000000000000F07D
-:80090000ECE8800400000000000000000000000000000000000000000000000000000000E0EB040000000000000000000000000000000000000000000000000000000000F04FFE80040018000000000000000000004001000040010000000000000000000000003F8105000000000000000000000000000000000000000000000000000030
-:80098000000000F04FFE800200400100800414800280041480020000800280040000214840010080041400108204000021BF26050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F481800280000000021000000210014CD
-:800A0000001002400100000080020000882800008088028002F0CF390000481800000012000000000000001412000040010000400100004001000000000087328084410128004840818102214860118002211A01148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400A8
-:800A80001002400100000080020000882800008088020000EFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000800100000080020000000000000000003FC8040000220000004002000040020000002301000000000000000082280000802802000047E7000000EE
-:800B0000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000001002000000000000000000000000000000EFFC05000000000000240000000000000000000000000000000082220000000000008B6F0000200200000000000000000000000012000000002200000000000088220000BF
-:800B8000F095BC000000000000000000001002000020010000000000000000000000000000008F34050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000001800000000000000000000000000000072
-:800C0000000000001FA50600000012000000002084040020020040020000800110020000000000000000002822FFA90400000000000000002004000000000000000040020000000000000000008002172E000000200100000000420080012800002400000018000000000000000000000080F29C2300000000001200002001000000200802
-:800C800080210100000011000000008800400100000022F0761B14000000000000000000000000001001000000000010020000000000000000F0BEDC0000221121110000880000248880080020020000004840020000008002000000000000009F9D0B0000002A0120011021040018100218209842004800281800480012283A2824010030
-:800D00002008822088080048884288C76A00002200180000821100408201210060286800420000004221208182031200000000200800488820E8C7060000346012001200800400822008120000000028184200000088480022008220088200000042F02D67000060124820014880442201122400800228002100002002221002001800002C
-:800D800040020000000000003F220C11200200168184228122084082041A042329842184280410C242182888488248002303214218422221000020088890C2221C2884F8848610012200481800480000244A011290124800800400000020C842001810021242000000800800C22814008F680D00001C0214522212284A08290100230482A1
-:800E000022122A2408211062241822A24222002422808104801242020000204802208824F88E539041902142422810820413482201228212422820AA1830120024B021082B41000028004A022A8102108104212002C02282200290423D4F00806114001A022002118288220000A04122122B4121144AA128001001212084A1824AA1420096
-:800E80008008008024823242802426A44830228FD70638180022002692212C2101002C0142000080240200100220848C0200120000112902882088C8428008228008007F4C0E1B418043212222021344A218A0818212211A042280A9A1122C0211129081B01284042220848188222421022912814C028014324228E222228880F43758205F
-:800F000022410142C0122823A22114112100828004A024208404207422820200C2250122A01212222810810800888A0422881082A4844820B2D80F7214112084B241021C5212460180810100002C02C6822A0C4220942223852104D848002008A024802408008004201C821C4281B47E03000010011118420082809212240062000000008D
-:800F800088800800200828484200002004A0840000002100244F310F00A04228800228B8005288218825821A0248428024E2232482848404184882482128821A02A02442C20021C842C2294A22044222483C88F23CFF80223111004811284602390121284280014280084220044200A042486024800848802808004880088880A4842200A3
-:801000008088041FFE08000042284827210027248288482024012B242A88880800244002272C200C00202282E4240182230221420021004210810200427F2D09181848822001601148184880A3412D12422880840224AA84810648822282004823A1438084014800428820248422042800002A0488AFB20E80040000484200A024008008A0
-:801080008800220000100240028800A08448008280080080022A088088040000EF4E0619242221041C042D511021884C8224A84820288208C800A812240082388280281802888812200C888288200800208808288214A2DFC40F108104002002885022A02821000020042928810188400124400120014800420000008002A82A28044200C8
-:801100002948F154D2142850112A84A66126E316C5723B942F2134824E824EC22CA2C529D8223A228A2CA4884A28AA86266226A088EE823AA18D828622A93C22A272124AA4E82322A848B042288A082AA448238804222B861C2CF8866DE01534111A014217144A8652132CD411A1842B421229012082A8242AB262642848281A05484E42F8
-:8011800029E4240CA0442B14C88280A4CC29082084A8CCA0C421C229A28288242C24A848146ADE5C0B2AE11403422012311372A6A1842C24A9185AFC82125E12824A26A2C880B452AA484A9242272414282B2829A544882C3C124A82AA18188242CA863C4200A04C2AAC8C4AA264CA28A6246028F051BD001C01804481440134822448A0E6
-:801200004920C92282282004001002002180288421840888108294821002214821902248218A14020028CFF90D4E61141220F4313146D323B252B711BB5265242C9482239112CA15A24C2A8EA2E2426AA66A6E624AF441432CF4E2423AA64C884E42885AA4A2223AE12575C232C22EA227242F2CBCC2EC2CFC424225B2C2E42EFCC282259B
-:80128000F242812F12B222A4EE88EEE37F810B1CB6B13611A0261F13A7463F33F262321F16B252B542FC42222B142B542F25B14265222B666A86B422A6446AAFEEEEE26E621F34FC42422F26E427F54151C0439E922B6A2AA6223AA3D4C26E622F22B242A44CCEC22F2CBCC20A4E422F2EBEC228ACC42F12B222B6E2AECCEEC21F3B024E9E
-:80130000611C25016AB631E336F233722F17B333FBD2D1CE828EE229B9929DD2CABD22AACCC8CABA62AECC6AA7466EE22AF643438EC22F2CA6EB2F1CA488CE421AA167AAAE2ABAAB15CAE826B2E2AE4CCAEC2CBC82A8EC88CE822BC6EA8EE42CE826A6462BE64AEC2AFAA5B2E015F7B1311711A0661B736AF633732F37F373B12F3DFD4208
-:80138000C22F24BC42BDC2FD52822F2CFC22822BEE6AAEC82AAECC6AAEEE6EE26E623F3CF4C2C22F2EE62FFFC251CAFC8142DED22B6AAAAA2ABAEB2CBDC2AC66AEA22F2CB4C2ACCCCEC22F2CB842ACCCEEE22F2C38C21F2CEC22A266EAA6CCEEC3DF7404180000002002200800000082288220280442000088004288200280A48200004849
-:80140000800482001420044282CFD107261181012248341A561219D4228144A24146022C2102484A028084622240227C22025842002981021224482448248A6424C082C0828AE4240A2C88842208481FEB041CB511E212B11122B411764291612F3491212F34B911F642921B412F24A9432F3429F242B12AF442B12AC4912E421CE8226475
-:80148000112F22641D2E42D6D122A52D2CB4D1D222B59142B291A2141B2923B481364219B24298212B8419B44228B242AA4A2F24AA4A29A842882E42150B1C85E612311180F262111B214E111B2846B11182BB813242B24E11A21C032DB129C4B12E521CE822EC11F8214292266218341E212CB88142B211C68219A2841B292394212B8439
-:8015000019B2429821299A212B84222BA4222F242212B222B4428AF46816008200000000200100000000001002882400144001000000000000000000000040017734A02800114682816123423A64281C62289A840486A2282B8400380000222C840112211A04B042081B38802108484220080011220000A048002F8C0B52960128136136FB
-:801580001902164231418229445122304212128AB252282482C2822C04006A094A72228284612316420229E42441C182112448C88A44A248252222886C28C2118621F46373A025CE1160121B413E411B122AB142E116318123A2C22D13002129AA18F012421A24A2212CE8282422044A021F24C22260211A745242011A2411612C4601488A
-:801600004AA84A242CC42228804C622C4A6818705308000024100224203481218A6424A0841223248A2802000024129812215248A082E02209218A1402002908001C08200882100148DC09222822122220922118302211000028130111428228002400004218420088000048240048002048022C082490822242F0EE7420041041022C0137
-:8016800028882001880024A0A41A2E2185050028A02400A8A0124822881890B2211A8624988228272C10024A282288888C222822F83FAF2022028012A221223886224201880000C81B4852424A03002302488024880400824002211022B84208231C3282B0422892828221292A8884F8CBED2004281301404201001200002C3211221A02F9
-:80170000980000002800382083A48280013A28A41642002200002008200C2228F0FCF220042852281828207412210123893922002C81B112140230122C0888A0822112124822808481220542160242824860188822002CA2428084022B24EDDC80230242166212484E1118424001A0420020280252222B412120AA4280010014222D13A01C
-:80178000184A2284014A220A292A0AA0422A240C2004207482F2173B001400140026020032003012C800A0830082281124100200188200001428884800002004002821002A880CF01F2EA0211C820219E21281E432851521A12123890123210C2B8158B24A018A1412034830121212182A88C24318281C83A6854682A22486A2C28AE218EF
-:8018000004482AA4689042422A8826E424F8DC2E800420C1122002241A041120384200122422218002A8807222A22800200490128009001848880000820024222820240826D1650200182848427248424A014248A041C8304200122822408223040024824A2B328200802C04282002402164282C02882A28840800F0AD7D80048004282168
-:801880002124002988082C280110823922002482400220880820882208212088024220A484828842882200200280022D2400001001A024802344828108184A81A42480840418804102980000482004800600002280220200422008244288141FE70618114811100325021988314290418018A292302288882280410224802481042140E29D
-:8019000021220820212C32C2001013829442222082180221F0823B0048208408800222128011120240828121024820140200182B412682C2C24842206222800482222002802C0200422C2408008A0D48E01224A2212A3441808284A418421C2285A441000000230828220040021828003848A0A4824A8112A2844A988300882A08AA240839
-:80198000628288F071DE0014481440010025420120E1380225022008100298100224C28288421824A22001002C8204002C0424000024000082EFD1082088021B2C10022B24888011222502881A8A2A22A98288240022241A28013888182A88A2483888221882208C8AA2244A0820B44288248202881488BFEB0200484002000019088E22FD
-:801A00008A0200000010228A01880080844411825422A048210018000000284282220020861452122F5909421718111F1226D833F222522F2254222F1858212B852F21E914B4A1A1C41ED27AA9822C21A28826A21AB022211212A2498E926A2D2121B442B292E22AA88242A0CB25B2A2A8E8D03196822F2C342221AAA886422D222048A172
-:801A8000886DC28024A832426E4262002AA6345A41229C91219223A428783AA8986A824282042C42E228C1124AE428A23A2E228E42482AA1218E4268A0344228226ABAE2280886A2E66848AA2CA2C6488E8121AF190D1242001F118234414A22A4432DC18AA54223E925DE22012D42212B281A06C8882F28E8213242A0814A2811E224BC53
-:801B0000C2BD22EA2A682429A124AAA81FA06A4A24A448B04186A8E48223A42828CA98222B8428F096C7200512202102002622088A4422019220882288A24880848204C810022B92800898B022089880882402228A0440A2480000200AED3A202CF121311F11F341612B231F14A726F011B11F1154222B581D111F347442B282B432B3B255
-:801B800081A1DE2A086E624E422B2829A4C4CA8D012F24F682A223E12888A6821AA2A84AA4558672423282EAEA2CFC23611D832B84CEC22726216AE22EF6624323A2648AA222AF45015AF111411F12B331A3553F13F243716A26B211F743522F29F9C2F23D132F25F452522B542AE323F3A2222F29B962A4642F2647B2C2BE22E424BCD2C2
-:801C0000AD91481D412BB82F31F882A22BA23A26A1A84AAE645A64242B62EAE82CF483A33D61CAA8CCEAACE62AA2646E632B4829A6A82BA28FC8025A85A4231F11F3113327232F26B762B242B431FB93822D822F28FF41132F24F542822B992F23FBB2B22D922BDE2B82EAEC2657222BA22324A499CE422D124E632F29FA92222F28BA8203
-:801C8000A4FA9AE228BAE2A6BB82CE8223ACAE8AFC61611F34FA42822BCC27262B886AA2EE2632222BC6A22AF22FA5A04C15F131211B221F34F433433F36F762622B461BF73F2CFDD2D22F2CFD43132F25FD52D2CAED26EF2BFBA2A22BBB6AEC2AEA22E224EC223A62C6F292922F2CFC82522F32B4B2FB93C22F28BAE2EE2B6B2B2F2ABAC4
-:801D0000C2AEFDDAE42CBAC2A48EEEE23F3CFEC2C22F2CB8C2FCE2C22BE6EAAEEC6E622B482AAC8A882FB90400003420020000000000288002200821100220842824221402212082240220084800002811000000FB6380240128181A0648A06124484A09981A148284014A094A02422242200DA01212C8A0821280A284122248224862A063
-:801D800084808884A8424A288AA84288227F9B0C481B21221B2166B111324219B662B111B242B991B242B911B442A9432F1429F24291BAF442B12AC4B12E421CE822E411E222641D2EC2D6E122A4292CBD91C2C21B292E121B294AB891B242B181366219B662B881B242B881B442A84A2BA42AB4422AB242AA4A88AE426FE50E481B611484
-:801E00001266B111724291214E1213F842111B28291BE114297A42216A14821CB882C4112E521CEA22EC11AA4296A18286C14196C1C21B292EC2198638914AB811D22298212B8619F26282282F341A512200D02208212312E222F417BD00820000002100000014000000250100200200400100000000000000004002000014F0354A20898E
-:801E800021120100114248250248241240A2282AC84388202482222401180080B222092A8C0A882A189281222A042A0C2084840448882984A22480F28D7C202408181AA4522D412A948121D6A182121A8494517A88642422326011482126819211245E22184A21C5429A223112181812984602144290A24880882214028AA2481414429F6A
-:801F0000C603A01C2811481E224822112130A22AC4121A84A1812988AE242F2A011C2503CE2118002B43211904822AA868EA01928A212184A224A0282922028A24863442244AE2283461144AF283638005208181449141C2482F1409184890414AA242241100C04228809211122081A1252F2225C11280012622C883408124242884040045
-:801F80008028880200EF120B4880010022282268217042214122081A2414010000202442018021A9125012800126012D12008246A16834004800880000B0830E19A2212021855522481062187A081011811882F382121B211882822C02241C24C1623E42806628D218208291422B24112AC422482502804882C822486823A424A024226FE5
-:80200000840C2238008011022442602E8041438138522488281200002CE4123411705202122C68211C01222C613462184A42C2421324122108422C02C848420022772C60148081A1144226A224282692811213048008A0163CC1112088881202006222122A2CA3480012200235022282244A08212482206422800262F0CD1A2004185A2257
-:80208000A18422243822460142A01650223081321A041A72B221082482004868C890211100460240229221001C328220022242220080B442F2CEBD00421420440110218C1181D82324621112425022116814238506C842222B14D012312228214042220423084221422602601822824200422008211FDD4DC111184021A2188003188025BD
-:8021000081488126C41132A02800100211100213011821802412C1316822004210019042C02260287082220C2282DF834FA1141813E111A224192522D212A1D21C85A4943522C1721E42E03168211B692A3431E691628024242265354AE1220913324126022D132C244A8266146022112532C1801A62282CA284230848685F8406140080F9
-:80218000012021023011A0484611011B412822000088405122100226226422004081220200238244818208004A820420248822F8FEB30028C021A02410021A561221A018318211D022632920A3422228253211182051221842208218810852244A0100006028906240020040015D34100100190213811101221121482880181181A45A820F
-:802200001CC9831100291401922A28888A84A2811148008A22082918B242082128201202218008884F8A4F011118808101222114B012023124260223022290C120044A821492421C04482B211852802202C011146262116282119041244282282D22804483F653472021812281128112A124800228A813082218421641012B42E02A0400B3
-:8022800024121400621C8804481C4281A818113128C0234A9A210022224E81422A042904FE8B800200114212421CB42308424A088246024E812868A229014A082C02200914281E42C08192198A2189063082881B843041821D822C0421298204884A0888FD14402101144260142501204411631462202C0282584221B08281842304424215
-:802300004E921C28081C028E4180B122B922042C048E4228248008C04282A8803222F02B8A14484021020000488008288048011721100210011641C1112088110200800480880400100200200400002121F045828021822381A1122868298208A814212002290D00281828100115C2411398C21128521A428181212298438036A222221078
-:802380000214A08480229862C021486F9F0828111904400100308242C02224421A42220C11708282C111A0C20000400300801681025012200440810222201CC14100233C22EF6E0460116012131621D62154123E43623951112B8433C4224AF122112F35E211662A181ADC33A84816B26323113381182CAC611AA5A11305B214131721B1D7
-:8024000042328110C24321E01418A226272AC21BC2002E21246FA445B11197112AB31183E114B511E316B221B643C8214E634A7A11C183EAB822A2E42A9D921DA18EC11B384A54113D21123F34652D4E42483B132316621C2AF2B131A06B685AB64271A131622F2A28B662AA2829886426A0E4393A422F26AE8A1CBCC2FC5EDA60122A72E0
-:8024800011011E213A423312428AD222A88A25E228A42A29F48183172911E6B252A52762BAF222A26AC443C0411E913F3DA82C8E92EABA21E518A8841DB1118E922F38F9A1E22CCCE21F14C6E213D8317C81D32382D6220C2E428E22A04446A222BFAD4E210420A24814482280A1482AA148188AC43219041308821001119012800829017D
-:8025000022E0120888C081481C012240224802248A04001904822028F4919FB051A233121E711F11B271331156A1721F32F192111F3551333B143B991F17D113F873133F1D41F2A3811F12FAB1D11F3676A3F343411F32D121F81212373117382F21F482C22B641BC81B621F1BFB11211F13F351233F36DF13F2E3A11F18FA23213F1AD248
-:8025800013F283813D8137342F286A242B222B8A2EA16AA466A22E221FC30B3AA3773AF131511F13E313E323F312222F26F763332F13E338F211333B182B991F39F1A3A13F33F263313F1EF6A3C13F1AF7E1F11F36F763633F3EFE73512CBC52F111939E113F3BFF92222B6CFAFD41E1BAEF12FB31311F37FB73331F14F2E3812BAE1F36EE
-:80260000F221611F32DE114A7143F3E2A227262F22BA63EE16A2262B666E612E622FBE0E1B773AA7111F11F371F11B371B457E212B321F33F8D3C11F36FA43A32B852F2D7C63B152F573933F1DD931F8E3C13F1AFE31F11F36F7E3E13F34FC22531E422F29F593431F3CE431F4A2622B641F1DFFF1711F1BFFA1211F1BF3D1233F3AFF13DF
-:80268000233F18AA2A3F12BEA2BA6392A33D813F3CF882E24E422F22F622A22BE62BE62BE6AAE826FE2A6B147E711F13B731F371311F17F771311F27E725F262723F37FAF3E12F3DFBC3C1DEC22BCD1F3EF2F2F23F17BAE1FBE3A13F1AADFAEAF7E1E13BEE3F36FE33519E422BDD1F3DFD8151AE732F2DA67DFAFFC1E11F1BFBB1B11F1BF6
-:80270000EB2FFBB2B21F3DFEC3C32BEE3F36BEE2FE63E23D832CF8C3832F2EFE62422F22BA62AEAEEAAAE6EEE12EE28F410A00002601008044032008134812011A04802228040080018890924218C081A0124888800820084001248641020028F0468AE0122161121210C112282E131982A12134823C1181031C23BA4231814A11817223C6
-:80278000224562142015A2244819A282122A194193412AA1482582662219440242902248282A248404485F71051CB41122B21122B411F2621119F2621319B26299212F1439812F2439212F143B312F342BDA12BB31E414F921421CF821421E212F2265192F2264192F22A5292E421B292EC31B292CB89162341B692F16B181724292212F97
-:802800002498212F2498412F24A8422BA4222B842AB442A8424AE822D42807481B61481B21421B612B14482F2421B842A9482BB41B482F24B121B442B9B1F442921388B133B442F82112981BC2882B5296F123C2922F32651D2E421AE232AC613CAD291CA8682F16217842A1282F14982129BA81A6848AB44222B242A84A29B8A28428FA8E
-:8028800035BE0082480010010000008004000020010000000000000000000000000000000040018F5601204221C22234242228122F11E21812C2411C282268281B812D310042C81C9A232828A021B0420110E314F882228836D12283421141230A822018E22402902282230840F248632031912819B1410128172512134C22A1942522419D
-:8029000022D21204244E111AC2A1102214D31284218CC582802C09122C018E410090C21CD41216C141C0C2A04242482D411936E11C22E4280418DA322128281522E2348162192B1226A31A2511C122A227342C61221D12381C2CFD8322C611C22118522CB58111C2421979C1A21C237932A2842140032F128814E11284B842889262482A4D
-:802980003441272C1C4221F432D9001130114E134082828144232984949200821C381142800220C22129042A084880088002112E112814E014887422210840820450228219A24828243FF7081C110100005022822C0114822413A11413C8821221821C43C2810022281924140280C28200823419044824481C0821828840A2482800002440
-:802A00007ED480829221283E42421C8124022561141642E114A8281032518681A621106124142D6217213C248923AB125EA2143B163436913223A1211F2142A228A830C29042142C0820B482242886847AD1011903198242021681442208111C61183C2448C2811C249842881C41A284212B42181C64116821221831F61231132728141B37
-:802A80004232422C28062B8490828048A2844E2282A04220F21ABC143021001A86043022701231421022983152A0183981A2122214141124172222238CA11A122A8C52122022C3121815022322988110829481100220240848887F61498122041819248421116221582AD41244A112303219028004112321082C281123118104861102B02D
-:802B000081E2144101190811888088384122828A8202230200215F2B0648121344818101100110013061220060221AA828F012412344820A989012143A942280922248004681044A2224220288222224108204424223F4B827000000002820420210024022810111A041820013010000002818003042322825028048220482244800240038
-:802B800080F8AF248084112131415212322561231E424211141361221E221B2120921388136128421003138191138034A2238281821291411E611C0E2324A4821002882A78A242022F220442C0827F56032200111800000019724202420080014A2822944188A0212D128200481A026022C081122140022621088AA2841B480042220000D7
-:802C0000421CF4B6AE1081121161111B24194212218438411C9613924A014AE218244481042C0400C0831C81042542221402142186210224282F124802142D821398C2502228882100881F150B100100000000100224113121211C08101181842842A1412021A841822014214881148118122184A8A420041022042304828248FF1B07264A
-:802C80000120015022281400881A885122421A18E122012954124880C82248340029E411248281044081BA123842200450121110014A02000000346FBF0400802221A142110021000000180082401291511341818C041C08C84041830A1214823944012384724222A82442004230410020F2A87F009021002503408208184246822201C03E
-:802D0000114280C4214820022C64212480246124882C441132A242200422880021881C04223082800210F23EB180052081A2161C01200446022142602D4200192802D0121142020092200890222A880AC0A186021C942142221B242902290823082C08304288BF7D0A000011004800109281821182202884080082182002A0813082204847
-:802D800001002002602800828681088200000000F0EFE580218A22E22402A0424223882801141B1200262202008A82C18217242C041442901200001042A1212724304100000000480000E01244F23F6C00114811002C14110227241908E8828821988602294491428218121908888240C22100130868160200200821001C9222908230410F
-:802E00001188212582F4F9EFC051821C62111E122AF1126342464122D432B852B21128AA88182F22F8D15119AC482712689E823D811E332944A39127284A6C282A68283D422D21267323E11858211B4C2C38411522883A822C7882D221B6426624243B243022C06121BF3F4F21E1182282B121F2516213946115B242D422A84D15E23465F1
-:802E8000344AC5825E412A223C411B441F1298414692411D233B442724182F21B1522CA581141B442BA8242B32FEB1883B4C8E42423DC313C46125816C1C8E8222290C8EC12C0846A188FF220C193221111B22465112222732218A2898118EC123B8137B1332D38AD32258222D81602446A1482B8262821F18B4113C811CB1829742C22CF5
-:802F000018A1A8172129F4222350122F12AA2627281F2638E1171429082928C48246028286E224F662C3144214208264124083044880041A44B2118492412411422014211421044219A12420442184082E11482248144826A2488044A148A04A242A44210A82428F8B09126A12F1315117292B312B2217222129B88298111D91C28A459256
-:802F8000121F3AF2837117383D416E61AEE11F3454333F3CD233E424FC13832F24A8C96EE22B88272C2F28BCC2E41A7A81F1B2C22B6CCAB8C2F4C2822B6835F1A1612AC24215F1C1432F269242221BE82F2212A28A8AAA423EC4141B331B6619F211711F31F133733B331F1212F282C229F893D33F15AF4C2F29F192828AE92BF7C1511F82
-:803000001CFC83812B661F1AF841533F38F823A317322F34F412812B919E923F3EBE92F982822B88EAF6E1618EA32F29FED2C2AEA22BCC2F28B882B2A2F8A3A12A92221F18F8C1832F2EA2222F2AB883FAA2232B222B8A8EA1EE628FED4BE117C741111F13F1F1432F31F3323117222F347482B2C2FC11111F1DAF1D2B5C3CF942D1173AF1
-:803080001F1CF7C1823F18FC6261AEE11F3CFD83813F34DE33E424F413832F34E411E435B5A2FAC2C22F28BCE2E61ADE31FAB2B22BFCCAB8C2EC2CB8C2D633FAC1C12E224E621D811F3CFC62222F2E4EA2CE2F22B2A2BA22A8A42A76184BB171F721611B221F17F371533F37F773323F12F242412F2CFCC2423F14F5C3D11B442B5D5E534A
-:80310000CED11F3FF543533BCC3F1CAC661F1EFC41C33BC41F36F663424E432F35FC52D32F3DFDC2C32BFF2F2CFCC3C2EAF621E12F38FAD3A22F2FFEE1E32F2CFCC3C22B6C2F2EFEE3E11F26B642EC1CFCC1C32F2CACCC2F2CBCE2FCC2C22B882AE814EA2EFE539EC0112002148001200882204121482208820000002800390888008008A1
-:803180002180082C0822400200140011240000F07ECC002814E0221101682503219227341308D03221CA311B48211B42F0814240E21412621188522B82822D12421CB88152221A6212482581D43218A182800829A842250228222122882CF4619BC0411B2126B111A2161B21273619F2421119B24299212B941B412F2439312F1439312F43
-:8032000034BB21F442911B424E911F22C4811F22E415F2214296F12152D6E122A5292D521B2D3CB491E232B891E236B1917642B1817662B381F2428119F2428213F842832AF442A2222F24289282AAA4842E421F390E221B612AB41182A1412724C0121996921B612BA419D422B93184B821F442B21B424A39832B941F22A1841DC25A78D0
-:803280002322FC2152D226E31DD222A42D3CA8612EC39226A1492581F662818AF6428119F642A18AD612A8484AA24A4AA84A212B4A88A29F4B08200800000000140000000000000000000000000000000000000000000040016FF40A2210A1123442807111B291423191110013082C236A288082012813744382324288884AA9852D82424C
-:80330000981B21142542C14190411542A22411003448212242882A8408C8F909A01810011912429182305222CA811862241B148A54211A6618130DA22724281214194983C222283011131682C8812CE82881C8822AA82C82228A5421C888C88601241938611424290828CA41E111022D61211C81711282C431138F0842122C83A8843728AC
-:803380004A0A1642E21AA4411392911CB882B28122512219E53EE11452211C18B14128682C86F122C22A3C212A4C82A484291C8144C2828A42A1841FEC0B000014007082B181C211820021137842A1483C2203138121AA242414252204C052CA82082081082D82122111220000113C08200A821B241C04247F3B0648000040122184342247
-:803400005012121C31812C01B81B484A22A8248A040018A012122A88029082282D91409141180070420320480224C082488800D0FC4FC121321903282D4226A116382B292CA15A56C283868225E22118B11212421151214A58221B2433B2437A827122A214868229C1221C2152221A3682E8318632412A88141233822A04222124288268B9
-:80348000C86F7304221811806224221B251A7222428291112D91311381919226D1120C19081928042394112691322D22C2222361211021012392422C0A86C243131C0221822B4220129242828084F83FC63041283200211502429A24A32C230498292C42A2182A3162E014827482021C3222293C8112328882E022A8213F28021995814A9B
-:803500001101806224603800108248822228C242BF2E0D1B3442004082D62222848496622381A412186A4822228288A4162321086A286228681E2118C073203C12D22908292204222882101262122188228888A0248A14F2B47B00423212800442241212001126814262142C041188112711422898200288142A082A11013B242E1122116F
-:803580001E221CB24238C31128402122064280240A10F25B9114401141212421011902601182003121121021020000112C1101302200A01200242008400110818C04302200008800EF770E481119C11148582962261158683B141A384114328E421E422C14A1284A2805C8284860182AC49138223A14E21E81D12218210226427221E21C22
-:8036000082C8212D42194463262A282488044AAA4824BF7E082E112002004E126026808112022C11912211282214C02111001E212E122821282182A02124E012A12925B281A21419A28440018800002220880A00BF570642001302345012208218D11261244A08238121042111482C84C8123A84484222E221AA86A602248602271810414D
-:8036800011A124002008820000A8212024F4DB93001C1201280068181146B192041114001C62122882222C0100242460198A0424008011811201201801482F28022052220000884888F0449F004001484A02182B4242128028449211824602141C018221142A4181042215022C849521000014C282202202001304008829840C8280F83EDD
-:803700003100000080840410A2124220014221B282001180018860194212138401821001201812220424A04880220230428800224825D239030020984111114062119082150218883081824A312200108284D322442134213812A24E2240A1211100408158220022408114022C2892222228146FE74301122A148192225032188838229029
-:80378000210019091622A2141229014A31A21C4C218139828A244811622C2C082B4229042C84088042C2422848218A04008014022D2600140000420040813422601648001140218828C1911502184612814442818418011400140014422480B8810200800400002F43061C86042270428222C241230E207412823A12426246226C226A2102
-:8038000042012110812C821122820121200100250229140128502200908200C829A8284AF815FA002868100111182890E2119828A08421291882A1848821A0141188180000143041821268008A2488243862C848802E88044821480025023F3B0F2A44116112D0116222521223FE72A32B6D10F1C2619AB192B5A2F2B3912AD423B181C8C8
-:8038800032118AA8422AB542B812CD812C64194E42339E412C8839133F221891822D8186B1210E4A6424232A5821C08221304246826A1E21EF1D09141B251C12A1662E424A946325D31195112AF9C2C11E411F22F842433448241AAB2F5813781222F4832315E311748122A7A22F22A5A21A2D166228244E2186D131449242824A46B22208
-:8039000042B242B4A2A844E02C34422AB4A22848622C6FC14E2124228252312354132E136AC7A28A54311F237142A211884AF851834A76C2C3C13AA285423D431AB152D22161143F28F7D3114ABA92C1222F38BA817413E1120342C2C21B842734372229AAC84AD811A824253242888AEC280A6A848EFC112720044081040048248A44A17A
-:803980004880449241248220281421044219011988820122422A280460124880840824008A048A4482048220882208FF134BE116B671C3211B624A7641F341412F25A1372B379ED13BB72B5C422F18EC24A14C1F34F333B32ABBA2FA21311F124BE2187883F361434AFC82811F3B1251224E62CE4282272C2F3DF921312E422D4235D32295
-:803A0000C4833F14A4443F38A8A22F289C822BC8B0829C822BCC6EA22BEE4A8CEC24FC6C82142E611B771B222E214E212F36F243415AA5342B662F25AFFD3F3D4FB2C2FC42521F1DB9E3F311B12B9A3F17FB23311F1BCB12CE831F32FA614129F491111F3BF891831F39A3752F2DF7A123243F19FD11111F1AFE81823D812C7883F3C34312
-:803A80004E221F1ABAA2DA227A83F38282B08288F842C22F26B6E2BEE2AEC64EC2CFC54DF141611B731B221B224A7641F341412F27B571F773331BDD3BFF2BFD1F1CB8C3ED24BDC2F451333F1BBBA2F3A3A13B7F1BD28ED21F38F841C317364E438E833F33FA1113AE83FEE26E6286E22CF493D11F18F8A1833F2CFC83822F2CD431F843F9
-:803B000041423F1A3A822F2CFE83812BC4212BCC88CAEC24B8A2BE42ACEE4EC27FBE48F141611B731B221F12F241613F36F643417AB561F7F3F33F11FF53B13F3DF5C1C33F18FD43933F1DFDF3733F1DBBA2F9F3711B7F1BDB8EC21F3CFC61631F27F441433F31F9B3C31F3BEA39E729EF2DFFE1E31F34FC93811F19F9E1A11F2CBCC3ECC8
-:803B80002CF4C3C33F3CFC62623F1EBAA2FAC2423F3CFCC2422B442BCCCAEC2CFCE2E22BEAEAAECECEC2BF820826012200483412A04180048A048A044800004A02100118004220040080012D82800880048A4422084022088AA4248242822FA5028042014681326260128A5412282D939A44012B14322B842229399128807823221421BDFC
-:803C000022012989B2220929281982C281D022082C88622240022400C08280A8428886F3819580B411021B2166B3117642B211F242121B682B961B682F3499412F24A9432F34A94A2F142BDB12BB21E414E922C4811F22E411F2215296E122ED19E222A52D2E421B292CBC9162221B2927341B2923B481F2428219B642B881B24238812FAA
-:803C80002428B24228FA4282AA9482AA84EA2AF4DBE780B41184B51122B41176420246B28186B981B642BB8194123AF442911B4A2F1439A12F1438134AF9A15246D12188F82142821F226C193C25CD4213CD831B612EC11AD212A86925B181E614B88136621B2829B2815412AA04AAB442A84A882388A84AEF770800002400180000000076
-:803D0000000000000000000000000000000000000000000000E05C0F902100501226122181247A82011A94C22B81318A4481BA4233B11AA484304366011C85A81629A918D828481C1232222C18E111CC2146C122C81D420021002A2804212820B854015218004290422229B4216811B0939482002A1DB292142228247821E218C222182CA7
-:803D8000E2222881682222F0138286028286B123A12123C2C222233421224219082182248A12220C14F08C1F202407200468272212422825B2B1E424A14829B9A3C4821E43221E821CAB1CBE42A6A2481C64228E5188A67291A2299E42AAD1226C14823F2238111CA31C4EA146A2241426A3422C0800A0482127280088CFFF071811002472
-:803E0000112111421B281C39812482002C818428B8428204111417221A02282921250210012821E0220827127022012B864810410288A22902422200CFEC0330111C01460100214011C18312100113AB24A21CA34138002602002CA9282152002302141124400242282460240010229822A200006DFF102102C0221227166631411D822E88
-:803E80009298C0C23C217D9201123C81B88102C66128422A3122271321C092222C2922F82182182B811B58242ACC82A223A824A250211123880A8642A242284824EFEF4201111890212381962125D121C8231918C1C211237812C111483CA212AA85C14188622662222E11982CC212208822681A331133C1212B828823962228A8464211A5
-:803F00002308203822290448B0960E141A420148241448422089819812181B1488A21AA2181918818208252201103282821A86113222009818C0422088281402400229CA8222822822003F1F0752127220824442011238901224621CB18261147012B2210170122104A8281D422063121228C01200125834002002214827128038A2622C82
-:803F800008218012F2B18600202491412981A221190280958121131202800200482B2180844922A8144641A148302320A1148820284832812334818821228A048008422A280423F4B95D000019222102200423C8214811208A04182282221820482104000010021126826822003022428800602480820462220080F8BD1320840126213242
-:8040000072241128122B29662144314329B952888481919322488048A16126B281B442C14122522119C21127221A88B912643850228A24368121236434422AA8A4E8482334A280A2485F5C0118A012124E1120A221460120D13209302110C1222228803121424800001A028226022001280088283482204802881002A8228004F04D18003E
-:80408000821A22842201222880C8811301130100220082188A81042288D88A023E82801881081420C2122A4882782222020000002480042CC422DFB209110000202104118042122122BB821181B8611122210488111001164202282623C8120060111944C24100248A44511214288820820221006DB920211A8102288061115012821CA8D6
-:804100001427188062121C1102228682168262112800822384012220081982042C844202C632A12501211042C242248086227CAF0D9011301119410211258282012382022B18A0142112984A1982C842888852481218128603128213022381212E280C4A082012024220064800003FD305620020C23216C241123816022F21043A042C455A
-:80418000024818222811C02126828281882838421146A221128A2181F2221212824A2A222202422A742282A62822A04820E412F4F93D10C121181304808212C28128185021A04200203A612123212462212044022A0180A91A20824212210810014880488108822502A800008F2F0B00002400800282008A0280081B2811884229040019BB
-:80420000040042421440414151211440110100C0410014820042242240022F360C201D01116022202459322220811842A2212C012902822C128164212C012D6228A0C129D422841482430221D02102424022240442224A08808204247FAC07AA01806121200434809211824A0A4229222484280425022E92A084800848C021001902482243
-:8042800048B0110426012908800223082188C8002388B8F70913621F1E112AD41163222E22484AB312782292A11C32C12AF292122C11B192DA21A1F51AE122BD220711181B44882AFC1292322B1733B852F51111E031A13156B162D823611C17222AB842E828D233C2426E81A840E2246226424A6636F01E69A0111B1811171116A2311A2A
-:8043000071227121C1111B1829F181121E939AA9242BA92B1217122F116E3AEA2AE52CE824FC22A21F34A423DE122388E424A9681E821D828EA23711135A331F22F79122EADC22FC82A12B2468371688155121237662A2262B4229B8221482BC42DED144C16128224A211232421F247312F2A1221EA1B6B352984237342A2CE635E6242122
-:804380001E822448F1A2211E413AD22289E421A32E2B482CE812E41AB222A4A22822211C65111B22422C642AC84223048E428ABA828CA868A800A6F26DD720A4128021084814481482229A049A84924180841201822833280490914A82082A2824220400A0126022482240A248A048284828822C22882288F2E19230811B351A81A51182A5
-:804400002E422B223B443BF68E923F12FA82913F15B983F863913F39B9D2B91394113AA9E63AABA21D83EAB221F231B21F2BFBA2229E122F27F2A2222B261F2AEA2CBB92EB2BBA3295118E12AAB2A17283F262228ADA12AA421591214612E22632C22EA26AA6CC4AE426FCC528141F11F31131121F11E511F912822F23F333312B443BEC8A
-:804480001DA23F18D9137B91F393913F1AF8B1932F1BF923222F29BB3219A2B24AF522822EA13B721F27F7F3322F28E92BE437EE2AF222A1BE321F39B953F521212F13B761F6C1723F17F6E16237282F28BAC24CD32352311521B22212B262B422B662B6C2AC444E427F8B42A1421B711B211AE321B312E126F473333B771F3AF382833F4D
-:804500003BF2C3B13F1CB843A89FDEB23F25F1D3C26E111F1BBD32AEF72EF21DC31BE61B661E13BEF32F26AED92E63AEC26E623F23B452F531713E222F23F343511F3BE32E36A32F24F4E2A22B8C2F36FEC2E117141F1CEC26B242E426BAC2F862A22BA42B44CAEC26FC12C8A07F1F11F311311F15E311F212222B773F17F352723F28BAA1
-:8045800083F2B3B13F1CF5D3C13F1DA5CFFAFF73713BEE3F16F2F3D1FAA6FFAE623F3EFC41613B725E532F36FEE2F2BED22EE2EEC23F27FF71533F17B7B1FF81A17E333F17F3D1B23F17FAE1832F36FEC2E22BAE6EE33F3CFC41431F3CBC62B462BE62BEE2B8E2BAE2AE66EAAAEE8F26030000002061228220482108001124822820042855
-:804600001110829282100222908290125012808844220848140080020000007FA1071CA1212621613AA01240311180C212112C21832803124212A82488808285A212522A0898281C817222014A91212F22216812808812022502882225A242A04242142F93092AB51182B111E214B111B26291212F14B181F262911B292B9413F94291220E
-:804680002F142BF34291222DB1AAC491AE421CFA224216E12265192ED29E212EC29AE222BC91C2421B29241B2966B291F262121B282396212F2498212F2418B14228F242A2222F242A92A2AA84EA22F44D4E8091611819A214199212484AB181B2423191389A94122AD412A94B1C8894922B4A1CE128A5142E821E812E5246C19216E11272
-:804700002CE52238D126B291C6C21B296213A81613382219B462B8818282168294A28AB44222889242A88E42EF5B0320880400000000000000000000000000001400004800000000000000400800002FFA054C11E5423128181410CA242C0425C181248E11C82C7838E293A8C316E811A2348211912138281C29F812222E882B182B1A226D
-:80478000341831294D71B3D218D6129218239A228041012410B4829322228324F422DF10A138C011472C282B382E41149382ABD24AB111041E284A81984434C882106148D084022B852746AB25C24A614442C691224492145A42846828624601488B4844AB3829E48219824484C42126F2155C7014F1C411439111163221B2215146A91256
-:804800003B833EC11C3191788AF18A324E3C1F24D928EC12A916921C788952481E22224E9198337D12624D1AEA34AA246D129621C5112F48B183D4126A863F2882A24281148E3823E4815A4223712422B22824F693290028228C32C410D28126829282488014628842C08122180011448002D267228B24228B2C24421001D0128866128C5A
-:8048800042222104A049644002A04A214840F2D6A900C011283C110111188C82A1414602208121983213E24408602842501824D24921C55212981269A92826221186762651814112624842112110628264A22F442822043F174D12351523C21129FC28423A347A11339D8320A8182F48754198643B256CACC18C823118688982E462A1212B
-:80490000248E2222A624322621603149B188A2929361251E422E838E48E02148222DF452884C28E982A414803528689E7150141119723182B548821548F131481621642C204521916249BD41922818812C0448268E92C26391624D422CE1485322006C618A2814271529C421122068241D9248A14CE88218A82421328386F4E18324C014EB
-:8049800023013C4883F252212C21988212E028C184839564962392924B8420819A6830111218A2188A2302124B819E212322B116C8784CC21B4D828B844AE2240148E02508124F2422B944880428FE6924438421149114C11B412671217C12811226B9640187287051C2244CC48322C9B318446844AC5848142672945828B01854812A44C8
-:804A00004218064B616C911C8466B4A85124481F22B1846462416A212471A46844C44AF1B9689011F05E2112482C41C412D028B2C9F124498137A24C14D42844440826120416811888A841E96444B01632648605842A314140748821C24122815085822E8412206888A2422F2481086CF15E35201206412D292521122265440000122384C0
-:804A80000818A3D2480140D42644A243281820028129B214D22101AA41B8120220123412342A08294428658544902C1008812F9345B11132121E257447B41633443972327564F98811278683592E5829C4824D131827448D3140581427ACE4AC41B41984D424983C686F8D62511314B228191466C549F146112C32781FAAD1813A424E9195
-:804B00005E882AB5C8F1C8242236A468CC088744FBF6904644A1122A41EC1221714822316211B011447484384A488D2426C88443C2348C4484A4242E5A4447228B21248504282AA1212543A8121B28228C124C04C0824125145442124AC848AD144885049F994E025042185A42F1124421458298112682918244244425D872487211088785
-:804B8000112572A40216E22168121824400216111284582942801988864CB4180820084110C8A222CB411A8AF156E3604211121302845014225449A2418146240618002890344120048448902810788401819224442820EC14622844222588C24800282288A22524042542F246E190612301212418812D121A82C84184F082438A416432C5
-:804C00001C223114C846C1288C4411924B4519BC1274338414D2123CA649B511426248715721856252223F4428B843C182144A41A2E12C8294488DA42A816482CE6D404814041E244694212024144A012841235C48414881000028AE4D49083A4C81043A04482C822822618120994891204126121433440020014012F46FE3244318111250
-:804C8000111864842811B0A801164111D834318870443888848AC1421C1128C42200C082A64488A282A08219398C8C3AC85C86388436CC6182536448122AB14428B86261881880D118F6D78BC01A812CC412102821242511B2434164812A4808CCA31246C21300821832802438244418403A11400228104208002948981242908818C5817C
-:804D00002802818684F8B9E340384413A242113244444121002128568122012414414C3284814C047014084880A4821A44E21824110400400480414408008051846148431888E1EA0842101134412D422215426111428C6A18241414143C71A8919446C4811C44D59218F5261114AD1315D8124194128A12047113931353C83C2413728273
-:804D800031188532411D861186E141048441100481F03C24141619A842244411111890645042424C032F8821024081CA48282A8C11888C9244442AB418CA4D12481D28818904421125044618611226048C364A82A1290316C28848239484979BF0773487285F222254786B14A551643D346F192ED511D582D121F13A52274E2E21AD3AA760
-:804E00009D2F79D91FA7518754EE428FF4C8A33F74C182BCE27355538D4A8E86BEF817B21B4B1F28E862D2E7A2ACC5DF147589F1E1C4C7BD1E851F28F84E3835B9D97C44B254F438224B164F2DD9CC91688D1B8E46AF444F42B344C1111E264B171E41478523E422C4142DFDA53A558DC459DAB1F815981713195A888E8A1F96FA116A75B0
-:804E8000B187F6594C1E6857D15BD439B2D4A798EB6715F2447425D456721F7128711D8DB392F246A885A9922F8AF21A411F18642425F12854AD128C7882DC4AA24A47414BEC2B92AFA1428154D325F4231139D6E9F221761F11735471417229A22F3C78D6615CCB11A556444F62B545624547484B828F81283226C3B26A75BA744C68223B
-:804F00006F47C21823B492E834EB83A1989A99423BCD9FE6686269D243F649126E386CD8448CA1A9AEA44B188DE226B842EA8429F11C283F350FB024014184430222484382044044C8244004445048C0244084C1240018A0128100402802002220820400806288449281128130482F2C4572447445057F31B452B8527A1AF851713F2171D8
-:804F800042F479A3BF38B363FD44C12F19F311852B111F1A7A2AF828393F32FF2129AEE19FF2F84849DFFEF215449F32EC25F5F1B37E65CFACB4D4F6145C1F35FD53524F42F22D2F4F5BF795553E35CF84D526DA9B72C8BB9AFE9233BFBCFCC48E9FB1F316B6AB554F64FE4248EAF4CACC8F87F4B888CFEAEE9B48F35675DF5856667F3117
-:80500000F182222B21EFA4F476732F24F7A6B47F57FFA231AFA4FFCE8B3F5DFF33A56FABF9A7ADAF56B7A4B3B3F32DB92EBA3FF2F1AC8EFFF6FA164EBFB3F4615ABFFCFFF2E6FFBCE1AFFE766F8FBFF7B6764FE6F78FB74F6AF67F7FEF7AFBE7DD4FFAD899F288BD9F58F9B8B29FBEFFC58EBFB9F93E7EAF8DFD64662F8EECAEFCAAEAEF3F
-:80508000CFFDBC9CEF6AFA692F245F45B61566217761AF85F43B22BFE5F65F7D7F21F363261F77FAEB73BFA4FFCECDAF9DFC6FE53F22F12723EFAEFE4A791DB93793BAFA2DBF25F267E747E3BFB6F3D2DA9FB7F77C6EEFBFF6D662EFC6FD77FF3F24F7B5F4DFF8F2BE3EBFD9F5F83FEF8CF546E2BF98F2A81BAFCDFDF2B2BFB8FADE9EFFC0
-:80510000F9F916B48B9BEF66FF725E8BDEEFCBFFEEE48F8FFAECFE2E46245F45F7952457717F61F36B6BFFAFF76A6EEFF7F756726F6EFF73F1AE23AFA5FD4E8FAFDFF53FAD6F2BF9373FAFEFFF8ABABF88FA39B98FA3FBADAF6FEAFA6F6B6FE1F47B7F2FAFFF6F7FEFEFFEDE5BEFAFFE6FCE6FFFFFF6F6CF6BFFAF27AF6EFA7FFFEFFEFB57
-:805180006F79CFEAFA8125AEBFBF9CFFD8FA9FBCFFDE9EFFF9F92A3C8FCBF9FEFE6FEBF9F8DAEFCBFFEEFCCFEFFFECEE6C0C18D01201144841004041081244124416D84822A924304882421008810041B02408490829084D8280C8482A4808864822088224488922A8241220F894884041F422121241124248181D444A014A014E8100200A
-:805200001494221AE4440230241249042A654449A52148924812E04102484B124443A4412A2861244348F624482068244904844C5894EF8D0C4D421F41D228F11124CB141FC1324A1D24EF14F11164AB9419F64A9151AF447924F84A9543F2429557822D954F82C4954FA2C4814FA264514FA265592E4A96E5A2E549C25A1F49D234F4911F
-:8052800024A7221F49B248F19124AF36F18124AB161F48F24A9319B24A19B54A39A4ABB443BB4A7934989A4F8294984FA2F489D7D0249441CD521D244F2421714AC34CED131B4987648E648F34DB81F4429613F8481613FA42941782AD943F8AD442D1A5C5943F22EC41D8A365493FA24CF422D387582D589E246F12E4C9F62A4396FC6276
-:80530000119E24AF3661488F1661488D17684EB14B29AF143994AB34A6384A43928A6B428BB44F22F129E9402808002001000080020000800421008008400440014008480082000000000000000021F0E66C20525281122D4A1E288111CB42582F21622A889420688317484455E851B21DA2A5861814C241424B141968412F82F914221E04
-:80538000841748C082C4306141C9B61C426C218532C11117C825E8C422912822AD943614F4188446F4FA52142325593251594827723422D11AA88485A1414F2134C115866483CA811288482136825C76227A18958289B62A1824189832274D7B21222D1483E91188D822682486B1212DA218425A4822A4812B4826A2846A6114F092363468
-:805400004E124F2C411AE5D4F8142B2857228D348F39B4D4D218BA6249CAC17CC8584F9822942D328D35AAB59A56628E412E4846FC42948F147AB2D684425658A76243F452A24D2825C45988CCF41282C39411CD611CE612D12CAC8426B412B488632A2C212497DC63F5F6F1201241215122102861244002B015048022C1945058821480FF
-:8054800078244291130081989A823991981504122A7811A482CC4222D82229881891188C043042478A4C1B04F071FE404204842200104404501810026082214118130A244C58241C522100422622582412224485A1214908004AC8482A388188008420921A8281484614F4F3371449D221C114495134578352C983250AC223C81C5FA841CB
-:80550000744835435F85E8158882248818084E144CD524C9858F1299942698C22A544129A1182378119A48511EC8348611A312C0CC53682C22AB81441841834888F264C860422502123CE252A114324428A04821C542115484604C4DD11A82022445082F1441911645E181C6848562442B431722441921C8128314816D3C8F149881130AF8
-:805580008C5841872C26A282444084C448D07B4D015C61418514440885A4144308C08918EC0919F4234A1781001B848288824143E2442138821C28B38282084118ACA8219D84404408242212824C84087018C218988486189424BE4530228C614427424490142983D28401512C74E114C52421244C4464224E184D418D8312282B828126BF
-:8056000041C8480025C14844B081C2186014244215E841D2125384123F2201442E442C12487824A2144843F8B5E140242244C92169110841218338368A212224D184E112E5280217284181284397482C49A48141E084412153292C23324C31A72489B922312426048CD82403C302A081478C1E6242236828C0525F4809001508212E421050
-:80568000B44881944240415228844844123883810880584385612481121342B45848361440840122288D84122301804408B04A014024237128C428F0CB46244138D43562426B424CB124C1524F24F1884226612960E44B21874536214834994DD8838412D283F6221AC1335B84856145D24C71136462449F427913E224B24961295E221E2B
-:805700002D16B4AAE12483D13E0125B434F88864AF41E2843332CE3C4245F2865D200AC02C1412A502C342081246B1855412842149F442363228407581E8441A44811488A124848123229412284018A828E3420428148481001E48426024C08490288E415F1947625440A124230100144601871683084D2160CA4143C8888661C8198868BE
-:805780001482840000844244A2448C088C68E48811848982F88211882188AC82781442489284884145B82CC4B7802232120020064314942310B1140888000020C424202202850412144226618890410028108801174C201412A4141088282C8482423842827F1F0AA21921411148312211214008271411618421211410A2811AF2A1462CD6
-:805800004A6A3224404812D148683842244046039952229812151488C22845A28181218392827042A28140F3EB62241558421964414241842A6142A0854C09388B484938613827422D842C2222C4184844892CC3712C2262211A04541295240112250487142302504182523056304485C148A024C90DBFE60D4881289034896424304150EB
-:80588000422E4846388413521217448181511041054D88431164843C088718881A12962165A1122B2811471628881146D184A182A8C1833821884C34221A1A0A462C5242FFCA02004C44428342394885624D8C421434424241B045086041418001990490144E144354244C28048840416C889854414388480115024E8C0088416089208858
-:80590000D8550D164812084816044400D64184810268128001190488211901400594120032208208288084210A4A32484C04002800C08449228221B4CC4D018F1D023611D91214511A1AC29124125012835112852213184A548160824592214C21CA4243D228941C006CA49415B68CC1122864CB24251268842901335CE24447258B8245D8
-:8059800062C246038814F0425E400A2C443484AC083E422483028697842C82582888BCCC81244AA84223944425081C3C112D241938224285E382B112C828211B4223B881314182521833011D4412198201189041284684912281DF1E043714B3D851F21544F5BA8352A937824F729292CF19A4221D135374AC23D4C8B23154656D814481AC
-:805A00001F14A422CBE26FC1F861488F92EC18F732A4142B48CF49F5192415F1C2218237481F68F28A32271C2D841B4D2F4F64142B79D04FFA4298EF633242672C83F4274246D582B8F4F918158E22BFE94681F2842B8F216112D6F1144F1CE47197414F61B643F241DACAEC71D1417CADEF18FD861B8641BA85FD87499E22CF1575C3C9B1
-:805A800021E533157721C9656D47C16E2A4BC22F2F3A35AD88CF11D28AB8357C117A3D52D21D315F6954911B4C249F6984E9A8D148FB864A8D3C6D424F4CC2442EC18D4C275B244F23A417212CC37483B4623248AB14179C2E9A8719E5BC82F84238297867F248A4AF8279887462E146FB24848E8E649B4216C4366654B1BF82F648132959
-:805B0000F8821A4D446CFD15272E923661D4CF42EE1CD128DBACD888FB48822EA3CE1941178CCF432CE142AA8C8F8AAA52AD284FACB244C8E8200410024148203124001220C1241A44248122514800824A921246044218004218A012841880C9480000800448C0482058180010F8C84C241F14E435F33131CFC3F73B39EFB5F1634965F67E
-:805B80006B5B3FF4FC4B28BFA2F2AB98EFA4DC13F3363BAFAEFE2AAEBFA2FB3C389F9BFB24242AFA3C4E7772AE385F83E2E2F89293AE26AFA958E865F61A1FFF7954247F717281FA13426E2EEFDBF9241A7F53F3D838EFDFFB5898BF93F32182EF41F119BB6FC262E22B133F2EFA3EB26AFA18184B9927A18FC94BF21111AC5555E7C1BF19
-:805C0000F5F452163F36F22626BFF7F5124EBFCEFE2A3ABFBCFF4ECA7F75F71A3BEFECFA23B7FFA2FB3C3AFFDBFF73714F1BFBBECEFFBED8D7F85D1847326F3DF9A627DF7BFCD9CB6F6DF83E3E6FEB7E13F2F6EF27A9EFA9F5E74F6FDB7D25FFBEFE9F8FF3E6AD9FDFFFBA789FE8F297559FB9FBBE7CAE9AAF837D61FE3F348FEEFE4A48B0
-:805C80004F19F828B85F5B4EF253572F41F73131CFF3F37B6DEFC1F143416D15FFB6F563DFBFCEFB2B683BF5FF84F583916B44BF97FF2E2C9FABF32C2A8F87FFBE1C9F97DFECF1ACEE6EEA7FA3F6774E4F39FDC94FAFAD794AFFB66E2FEDFDD55F4F2CFE95F79FA2F2B1A27EAE6FFFF37C4A7F5EFB482CAFFBFB7ABC3F37F343E2EB15FF91
-:805D0000B4FD7EBCAFE6FD76344F6AFE3E784B22EFC1F11C944FC2F74E48241F77F71A367F72F21E1EBFF5F41A1637346F65F57F7F2FC3B7FBFFBAF83F35FDDEDA7F7FFDE7E7FFD7FB7FF57FA9F98D8BDFD1FDFD7DCF9FFF6DFFFFB6FE474DDF87F77D5B6F3FFDDE4FFFF9FDDAD9AFEFF6FAFA7F7DFB7736EF7BFF3A3AFFBFF973BB6FDF0C
-:805D8000F3FDDFFFDEFF7D7CEFFAFFFBB92F2FFBCFCAFFDCF4EDCFEFCFF7ECDEEFC7EFAEFEDEF8CF8AFAAE8CCD81CFC6FEFF24302200A09248400816088C048460886450488228136144828902281190114241B0220914B024081C084B82004860884008822850488A84228802AF3302AA2431224440048C36448A7422024A48C884484668
-:805E0000238A1214A2483841404854824CE28249C488284508C886A4823048C4204921A88484008D9143038018044F82B44801DFD2022CF41124C5F21124C3F49124AB141D64EB141D64AF149921AF1419F54A9443F34A955B422F547924D85AF924485CF9A44A5CF8254A1E256FA264592E4A96C54A9E24ACF491242CF4912485F391241A
-:805E800083F49124AF14F88124AB141F48F24A9119F24A9153B84A3924AB9443BA4A7924989A4F8294984FAAF4ED25C0531B614D411FC1724CD341D23ED141F64E111D44AF549921AF349B45AF743934AD855B422F547935D84AF82648AD955F2AE544D887E85578266A552FA268512DCBDE25A41FC9F2224A1F49D43AF4912CA7261F4844
-:805F0000D23AF9816C6F267181FC68171B218D835B68AD164B42AD924F8BF44AA24783A9F82648A9F9845ABFDB0D8400000000000000000000008001000000140084800400200444400428000000105812F0D9B6101414151D786128117444B289A3528A1221D528812A2451124014044E8411702CC1242041898848042A61218C081AE2E1
-:805F8000882212751418E88324C148C0C490888120B28C3264467864FA62E7241CB481F128121AB8144814A82126219482118E48816F18244198218D468D139B48833188814227825248B9F24C224382946429C5E1341B822662122441C56281244F147A82224A32811C417132E418F39824C38844691BF0EDAF244843D418729699882E8E
-:80600000448981E344F291684BA18AE2921428884AC8234641D8631C0CCB811CB4887278C46213E26463928AA4821E41CE211B21CE2886982318A63428174185E4D4B8BCA4126648B1450B4B2189C928C44B288B428F1B7456F875245014139114901415084434304211881AF44A171242128536118112898804211441818444604461405C
-:806080003211230226425824842C81522282248210918A26C194A283140526F2C155400200218051811448894168141B41188019E1442252128220E844924100282C0170489412001912042B9482181B414112241200A961882D1245B84A22028008CF18032F41829112ED1159D124914C124B142E9886E322296148615880AE18AD91C4A4
-:8061000019668B9324982A2E18CCD42CF841848F21D8483322AE4C411B38211D3A2A312187634D28C02A8CA82411D0816848228AA22943984C2B124782CC027F4D4D92342150182D144452911CA58481291992918025E116288219E212AC824A884A39388744A608822362464302134A91112D22D681214321A28168008633948C28C384F0
-:80618000684D2818CC5248F0517D00182D124911C112C412448B211939284E1143D4420188E0647928410D8C41C9442B4200443F4C911A47A1A44E98442C81D2848221F288268584451C0A330184812682F8221A8D844229028A02B771701441282493141C21621420341448122C220142301149F4C2224688414138128C8A41416484C3D9
-:80620000C1582F443141262843161844442C014129D161012285C12884182389B484A2248121CE9AA024845602814116127829541C142143B42311D4A161C14E39212134B24D48122B2817441E814026952648A214701448B448E24812E22221113A112A4448042B1290164C0D418608122614F2AE67149014284502660224421280131292
-:80628000880410429411160422C9445428506A8484172122418CC222482582081082C2628C22218262814582240C608249038C2814F4E4BA904518268212F444313049AF144268312CC4128731419146942A29911173ABA14D18C12DAA741B2127C185E48194296B254F84B14641C12443C2A42D2825C21645AA521E2876C6182416586262
-:8063000094A9F61488184B298D84444A624645F28D45A012441816941AF0221210F41144A02142A01412A9B111449744428CA4241944C448812414656245848A62824AD22225116A4841282A41581220B211021242432904A13A846A8981F04CA12418A411253816229044281A8402184C948113388148A7122C04E0720183D268914420C0
-:80638000137144718A1408002D115C02882C9D488822A632248648181A08C1482022062E4882DDFC602412168801214781142D14252864488411624784100247826884002044988219284108449E284726412481109A248AD224E44821246825114A381188B01C0A881A081A88D22B0D4100242CD441842402541E84852108008941E1819B
-:806400004861244712422481160140D81832882486082B812A6148181134134411413145262914C14C3B2862802448084440F8F48E1415188404201942288451822E44330425022F24122414621120483881E014B84612C2424AF3D2242A211C818412B28E2313A82928838828D181821801168448CA424604892692847F3604D254CC5234
-:806480004244644B14444CE248C448188CE118241254844389B48414D484322465B8A504512A9185440040C485291888884144449488102A280A205182286312421EC8888425786B05904829240340A1124822264113C41444560130148CB18101882840C488468462818884412A41689410B1812228494234243800804A8408884D6888B1
-:806500000044448FA40E26081C41C9318941424111D82221022548891803002812D021082422141E4266220123054884112604212024060012182721C024630120B144A1218A01FF9E0C28100485C14184161298811CF812484C34126C84A1281449A8189041809444809218A1001A0448221A22788812AC1422191138598183054E8C4480
-:80658000C31C38C830846088430829F28B8440BC12A242484828261288014014E1A88289222151123420D1121581E1948A192184D81402E6512D12B44382045912119C119011111594221B2124422821838214A4416142EF84092E528F68C3241F81511A3F62B713F11655DB615ECCA14AA6484F15B548F22481BF29F712D19F41F448C88C
-:806600007BF14F91B2D156B6AE81CE4615F462D55F3C7458BB410F4DDC36F4DF226F16D41C718644FAA18C4F2BD159374455EC88D899E898F9A89627146B8A8D48AD8C4FA6B2E4E844A3BCCF89FC84A26F88F8BA4B1455341745D14A7411345885426A468D121F8FB8AB11B38BF884871F6D658255E498FA971126B128752487946F17127E
-:80668000CD295FA1D288EB426152AF4D3AC2412E552CF281A43E297B2A6F14F141844F8FF893ECFAB359E44CF1692217941F287C41A4BC4B348A9842CF88FC1E4C4A61842E243E4DB0526284BFA3C1224F2457144FC6B429D222F185217C67B1CFF541BE2355824D81246B146C225443989B8246FC1C182F27042393E1E7A94D5A8B238F65
-:80670000BC8FB8917122D229F818951AD21A0687328D816F32A3231A14F21C1C8FB17126642AAF41D4C812022E248F4391486FF10C60124081C41100004800408822812241028324314821280000413022003022004821108214A24123A24180C4221A4424C122202408590B1F3775539C214F4156ECDFF2F3424C3F51F579739FBBFFDFC9
-:80678000989FBAF2C141CFD1F556BD6E422D518D485B444FF3FF36A6CFCEFA2514AF86E232F6866BCFA1D2DC7C1CFC84443B51BE3CCFE3D3CE51447F66B695E38981F68D4CCD2FA7A4AF91D2C475B4F782D2A7188BCA6F79B992BF38EB2AFEB8A22F3FF81F9A2F2DFD547C7E742B6B4D47144F67F5135C9F82E3C1F254459FF5F1424C3F09
-:8068000051E525F7F9FFBFDDF9AB6BBFBCF658DF6FE5FE66C62F3BDDFFF44F5C1F17F7A5A4FF9AFA2524CF9ADBF4F267BF5FE5F32C6F2B775FD8F495DC1FD7F2BC7EEFBDFF2C3E7F6EBEF5FF989CBEF3F7FAEFFAFACBED8FF9FE231FAF7BF98FBF2F1AFA99A1CF787883F9AAA48FCAFAB4A46FD3FAD4DD8F8DFD76FCFEE12FAAFD9BEA245F
-:806880001F17F73367BFB1F2153DDFC2F72D7D6FC7F61173FF77F7FFFF3FDDFD219B3F94FFDC5D4F55F9E17ADFECF56E4E5F26F476DFEFC3FD6E6CDFCBFF697A2F3AFE2EEDAFA1F62E4CDFD9F8FC6E5F69FDBA7FAFEFFF3E1C5FDAD864F6B4714FBBF38EA6DFE5F6CEAFA786DEB9CFECFFF6B72F4FFDF883AF8DFED693AF4DFDFE946F2F53
-:80690000FFECA2AFAEF83E9A2F4FF9B6388F8FF6A8F8AFC547F37454B751BFA3F2132D5F55F45D1F7F77F617776F65F6FFEFAF85EDB2FF53DBEFFDFD76C45FF7FFFFFFFFD6F4FDDEFFF7F7FFFCDFD6F6EDECDFBEFE8EEFFFD7F6517AFFD2F6B5B55FFFF59DDEAFB7F79A56FFEDFFE7EF7F7AFEA563FFF8F8FEB71F55F6D4659FFEF2DE3DAA
-:80698000DFDEF7FCF59FDDFFF8EBBF9CFCCCCBBF9CF5EEE4EFAEFEECEA6FC6FEF4DEAFCEFC74FC8FBFFCA8CABFD7012901630224842E1260228E482641482149328164001AC42480024E240029012921948680289412C09184888498124B828400204904248220C1246044D0CE0C8A2101122219247411088AE2240187145129A8418304FF
-:806A00008909218438841425088C44D184048CA1212D481D2443026D828A921428A5C26426022CC9288882A1224C58844A2A88A8428886F24F7ED034F5112485F2112483F41164AF14D141F64A111D24AB9419B64A19F54A914B43AF143935AF347925D81AF935488D914FA2D418F8274A16F1244A96F1254A96E5A2F498242D4A1F49F2EE
-:806A800024421F49522A1F497248F39124A7341F48F24A131F41F26A9319F24A9353F84A914782ABB4478A2F447BA4B84AFBA448984FA2F4F16CD024A5412CE541F24E1168E99161EF149121AD941F48B64A1AF54A914F81F44A9113F1429453BA4231B34E946B1A141DC21E844D4A16D5A12CE9B264592E421FC1B224FC914C8F22E44913
-:806B00007228E349766AE348D23AC164AF72A841ADB34F88D6129944A89AB44A33848B346B4A899856FFCA020000008100821244000000000014008008000014000048000000000000004008001448AF96042440234211611439D2182308800130121E4241A1C32961819961C8404444D8411391128112214332141E824908ACA82546224A
-:806B8000482252A2AC61248D41421E484C0886648485E48201425F4F024A221AC2156CC42821815042262142624994824F189288434122483484148E4846AA122D61A189F3258A282D24C09210117181125461388712C44591411C628824912C52384722D02121B144E81418FC359F602442E011D241D418924123B211021C22E242311422
-:806C000095024F125D844CD128C88249C1894F8168888B4845D28192361FA1B289C12A4F214271886641CE12459181884B614AD318184C551C8D31A3DE29C4413E4A95742422F81142A44F81CA4116F867D1208252324424105281856248002482204922183A1418844C112154241A825418C02421001A021188502E1125824282724202EA
-:806C80002410082C0844844C81849844FFD50A22114128001810140111271420944144112531118140014E2424811568114921C1D220A2282924110229112192412562890023244854848D22D02A1254488228484F9441325543321225981EA72315D46B715172487488A1838B1885D249D886F312838D14C4C5823839B6185CA34D411661
-:806D0000A421E312082886C81C702532254B38268C7214F84815128D851332682E18157214388148448DA44684213A54C4F0A2A2D042C3212341D8A4E18152614D1B5C714481285381841B84CF14D162411874117C82C818365884C4482183D343810152822830611E23495B2C1AC214CF118611D91ABA28A42142184C3848C1CB8246944D
-:806D800012874258C4421F8C02131414D422022418205482941CB85208259C2213D8615118001C6218241B42257518143128C1128A12DA84E1284214062210091D42498801812563C814442642922844828684026EA6109114422541CA4412215061184B218B182712C089292414082C11E88102C4514E82856489508243B5246154228440
-:806E00002884281481122051688143C3982B681654823225021E424024B286F18924D0680546A121421A42DC1821926213C848412E14451824A1213B41835128884145C3A21AC4814014C68210486B814C44344451302646384111805148214912382444288B21818B4266381821B76520022F814278144108241F84410800A480018501C1
-:806E8000422A981490484884002283A412842C0445912218A812230170329822182200912182251824CC849810A442DF3E091F618661813B218375785468912E1947849621E2A14859C28698121D221921A528C98952B4E658924244CF22994C2FA269C447A746F82613439414CCF824131125C4481F8611D1248161812F88D16304E98A05
-:806F000032268B1C8D868A97682E142E849F9F0D82442712844503181227241912E2810443015321E48134488489018D144844494451820080014120822202188CC212B0224138282860888D14D04A0129A241814181487F1D42810440811184343850142324988484881991841218832114D82811D8828812889164E3618110A81452905E
-:806F800014124CE1224119C12821424D681282254898588484248B422882CC81F172D360820042130240C1222843410311102C0110448481C48124E021648284282B242302478825820281008042C4544480442484042342021142182A084FD94DA2184951481880110A21842C824848341A2C44032C24648118424948412204214904C9D7
-:807000008522726144C4281021A412221024042632180022446800222942C6242F6903A4C04244424880210520B2148222148202211825819422121048511626031C02CA21018C12811208851418111899231111442084C11410862901F07C2E1464872512157C5271117C44197245C824336581178847188413184E2E141D4444044B484F
-:807080003744418141402A82024C6211229441546C12E425D218622185C4A2C331546C22A221656283CA3118228B812E85560784418C8401208154224A418414829244C41111518011512324152888184441C11584C44734142508181681C24100108111418252824311084440142402B9050028400421830200142816081200004829143D
-:80710000524110882181A442484282884008410060110080A414000020028C0280045FE70D4C7488815182258CFC24112D41A04180240136148211C21433141168418C84942135C462120013419121898164911C82122C614445410100CA820130446044308A84B08AB1FB456281244D412018084441853129AB12E0218AA884888128906E
-:8071800022100249038814400B44460170111C8414C8414889A1141A943C118211282C45022B142668494410029F2145F112122788E50A1DC49FA4D825F1411C8722378136F4488B4F4ADB59B1447E15D91B7818F842145846DB8451684CD811EA28545626FC18642B2416A1148C6445D5B721B31561811D2919D44D95135994328B15AB1B
-:80720000524A7416D242A1162D4829F214526911B848728268321E1EBF384D32649F4C61515FA1011827528D2241CF14D212A42313E1216888AD829265B314744FD643F358414B12FD494A742738593D512726DF42D569F336248F4AD8192A914287D28F52F31C144F2662828F4562979CD4C4D491227369FD5448ED4A4724C7E6288F647E
-:8072800072E27C36BC14F39C6869F2C3AFC044472138AD45EF17F114448F85F432413F45E462F54D323B58A57884F81A16CE544F62013C62914B41E015E428718EDE18C252CF215215B42F86D489A4344F2AB56277148512018D155E2147926C735DD4317244F481B38A09A0331A71626C824BF18A29C294AAB89342A12480028E68345022
-:80730000248C048420480360824413022244224282461422041004490820240200244824402241A24834124448A041248A54484881AF9A4EF2B3451FC751488B7387A2BF77B94AF465551D7D1B33BF96F773F18F6BB992F99DB16F2EFA8F883D3729F33F3B7F32F125252AF36E8F3F38FEA1295F11F15F937D5B1FD3F723257E3C4F43FB03
-:80738000D4544F73E244F2212915E913B658F121217D6E75F5511737149FB3F723211FD8DD11F15913EF22F22C7A27426F63D4EAF342A2C7844F88F14ACC2FFC4F7273F13F56AFC3F335355FFFF17217EF15F56D193D7DDFD7F367791FB2F6BF93EFC9F9FDD3FFFEFAA3A22D366F64F32F2FBF92D5DBD551F13C1B6F28FAA9AF7F71F11B77
-:80740000162D5E7FF3F7294B4E458EF84FF8EFF3F231255F56D65DF21C65DFD7F364687FA3D257F1297F75F46C6A2F17D384DB33D13BF43A52ED1E2F237316FCA43CCBB7AB154FCEF75444BFCA4FD373F611548F4332188F91F659B7AF25F477758FE7B733F3696D3F17FD99B33F39F91F936F2CF8AFAA7D172F23F126127B34FFD4E481EE
-:80748000F564DDBFB8FE44C84D59FFB6D433F13A7E2F62E6D2F7BCA4CF4BFA327B6E642A56988F12B258F72127FFE4F66E26BF65714BFB73373F36F2CBF9AF24F15E1E6F22B26CF76A246F47F748BE29DC8EF8E4D88D9E6F3542F3D3737F61711AFE3535DFD5F75937FF75F47F2DBFF7F67F3EBFB7F7ABFBBF38F99F9FFF3CFDFF3FBF2897
-:80750000D97FF1771767662B24DFD5F5757D4F9EBDC6FE4CCE4FE5F55A4E6F24F17F7ECFE2F6286CCFC5FEDD6E2F77F771754F42B718F34C25DFD5F7342EFFA7F66A72AF66F74E1E2F24F3F2B2AF84FD4E56EFE5F57656CF46F77E766FE5F5E4FEEF83FD1C9C4FCAF948CA8F2308210040032212341A049224122400122021240182108262
-:80758000826144108801490118302484004120820400408404400400007F3D0C2C042420048014024681D212084A28C18211801412012488A4702422612242004DC244808221011E4400810048880010022524882208146F9A074F32F41124C7221FC1726CF21164A7241D6CEB141D64AB941B68AF245985AF54F92548AF543B242F147BFA
-:8076000024D852FB24481CFBA54A5CFA244A16F1264A96E1A26459ACE449C2CA1F49F224431F4952281FC97248F19124AF34F19124EF24D141F24A921B29AB9451AB9443B34A3924AB94478B2F44F934484AF9A44ABF31014D5A1AD4247511D81CE181B444D1C1F66C111D68AD941FC8B6424BF842948CF44A9455F84A94D04A99468F54F2
-:80768000F982124E944FA2F85884472283F9244296F4254A8F51E222ECCD7224E289D428E44922E6C8A2129E6CC3A4216E949E2C285F81E6147934D842FA3448A9AB4B857634D84AFAA4187F3B0884822008000000448002008001000000000014400100C0480000000044000000008018028FE30160121361C14605108202E611924850F8
-:8077000018C5424881912862C48843B824684412491444084810C84424A028A761325AB2828112C225A96122161834C822492332C22E18F847818483F2FCE6402159A28886CA44C116FC128F4D4B6081141D482D1413E124C3CA874273C184001518126A229392116512C81E43B216A4211C215286603844411F88D1782189628486629943
-:807780003574147888B28424614841A24645F4315100D658184CE8481414586222B063187A28143112456882141A02E6162C68E94722C6082D24451118C24A221E49C347A22483DA84A1A145A2181844282D3866E24259C1AF1884D248E924A2184B383E849048A3F2EA484091212D12165838484116D83CD9C1041246C1488535112F2462
-:80780000E188546A578300108118A4211D48126181494114061C01650225A361411F88D23A719104848522497414C8224328442874B44814E4FA0345221142384A1311C8282411888C8681040022400884408808814800400A188200690821002024911200112180084A2881321418F0AB25A0412644321410CC441C140121160385C61801
-:8078800045281128044C0113B244123244612C824212082825C811E042518118207A22942120CAC9188901849E24463214218D241280025F4B0B4844901C424142994601E091028D42184112801428011443846824414622021038228113081235080023220282D62111480216241892C289A1214C81022FB7038D142F250221A18711C429
-:80790000404263484622C124818130280044258872280243412802100A158281119824862411821A1481E42142084CC12184A2424C0126042112F0C1BDE0449311284548397830124E29689C31124881C01884108201406848C140218302490162274828152231248574244862821844121222184082311416828102625618D4DC0A008D88
-:80798000143502142845018038291812644B284B2584814654C14428114A02504A2C51848C68C2201284022436218121314636018C2215388181848CC228841843C28422814F290A115012604121432112040040011480C2148128830140821204A0246830140023012501101494288410110823010020426C81890162FF97075914E13208
-:807A00004158581B426C92349384C6999982D41841F412848381528483658283312813C86E2814836322CCE44B84E246E14248B21102223D284C9214AD2465D884031E288B24839193812D18C98173227818341C4E984846F42578A01212E115D4226181181143022412180017824E24842911441504410044611222814508214C42225108
-:807A80001616941880A161141214120000288418222843923826F8663F8001141280A2120084230442118100842800000021001001009021000040048021112A088028824198220000824FE10528294246128111B124110681190110117844721401400420028524012602414322321212241410119218141C0191881880C1116C4188018C
-:807B0000381A22352862CFA10E8721425100281CE241028448144828104824210200002021012821442211212210023410448101842118A0211C881142982232381228F0CFE460828B464A741242818101254452C44D144B221B229480544B00642552221AA311A748001001157521817118598887140090184021C111C7484D844B222A97
-:807B800082C1248C210140724252A23AFD8BE40000212210880250810000000028C021001004000000100200000022800120088820018002289044AFA10883C2284848504100424014C414282800301100250221189882884008C021142618C84842198402200140146441282800840082272410F2CD814008482420022011815148222E44
-:807C0000219440010000214418C0810000281400252882460249023018204864822E2881882100001022F1864700480000004048048C0210180A001121800188000012142042082904000000C01412280000004410021AB17D092502220000001100200100400100101404004400000022210000200220018061811800000000FB4C008379
-:807C800004420080813418C554544352828302000024255222126049862808001110518A8183344442000016215844414302220000E028542246A2154F53038CD188848404004001160145848202111504004092124981C1812C08001C424121028781681914020000C018458482020012004012E2CA040030220080120800101171114810
-:807D000008180000112800100412C02228A01222100228002001C08A8901408808004241411E7A100243420222001200408824040000004400004100000010022002001240218808008011080000F098A520022410220230181511598116784211D1385181301100110044441014041840E222A2222D22122A4233220038B0112888791810
-:807D800008862821C18800824849046F8F052321A2222C225214A0121991181C013011948414411810014145044140421428012210220280024B22208281813918701818081881188004D044C4DE24244014022884284A44688110183848104841810228403124509100002A820224122B226411002071110812A0882981612881004C8277
-:807E0000A82420F4ED34F036222D222E122B131221C0122592832FB1F111111B98179987848F18E48424549115C1419558884F84746854444B244F42224204284554642E246F22F212222E122B131AB882082C592239F812131F11B189E888D888B888F44848C04880548885F8444897EFF026226D222AA111121280512229C8131F319164
-:807E8000D19E8887818D414A24641415C141155889688F44544C49A222222280425444386F22D226A2121AA18192821C512229C8131F3191811F89D988B888242C048044588868EF72010000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000003A
-:807F000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000A3
-:807F8000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000023
-:808000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000A2
-:8080800000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000022
-:80810000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000A1
-:808180000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000021
-:8082000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000A0
-:80828000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000020
-:808300000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000009F
-:8083800000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000001F
-:80840000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000009E
-:808480000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00001E
-:8085000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE9D
-:80858000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F06A
-:808600004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000008C
-:8086800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000001C
-:80870000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000009B
-:808780000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000001B
-:8088000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000009A
-:80888000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000001A
-:808900000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000099
-:8089800000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000019
-:808A0000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000098
-:808A80000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000018
-:808B000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000097
-:808B8000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000017
-:808C00000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000096
-:808C800000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000016
-:808D0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F95
-:808D80000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF08
-:808E0000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000093
-:808E800000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000014
-:808F0000000000FFE40F214214944D138C0441415B4220234284D261041A0440422821012B1229023992111143120814008C4159A4846081262202222601244C824202281A22082788DFBB4531411611C24242414726722A042D2410044D43284C322737C32F2271318801E50214176113C11AC189D1811154818C32231D38114011D484CB
-:808F8000322641412D2412414CC824846167824D282D8286182A88F14D61102214819454E02442244481822202412724281B24111041084941827124025014A01241202282015081A190140028381410042485140828885082BEC62024110221250C122224201144344114002E1C12838101A1602240712B42485141104142C12818810041
-:80900000644012140249220889022400842508F09D36141001004820044B24000028494202C02222002400121818188400810014811100228444284400442C522400448A220820B1160C110091141024120444000010C4161042021200141400801118089400141044142822020000002624622224122088F8787C00002002000000000002
-:809080000000001400000000820000000000000000800110020000F018BA4014042141422293413414818858184384322447A1442840C128409828231158A2868291122D2216080000D02402911200008C210120022A014440F8FC4DA0349024BC3141442D4423A22413E231742841E2441852241B484ABA112434118C6245AC12115485D2
-:8091000026218422A22846084D11A602811981C211833144A0128392282144848582022362E4490449B824F89D1AA034442634184541D62436394C64538975A1A84116624428192AD552A4241214C383528122E3C12927A48AA2212D328D42181C0110C811281F4221714801188C8212D284810122004A4214644826FCA8B110042411231E
-:80918000840420023440B28404412744478A1840618242A4508414002480884248E422080000A144182840081048182292224781230420F8E9AC40012C4114441C528181114A0100002C014602004604000081651808122041524145D2C122C2284111001819040043C1141220814108F093BE50424D31258492121847214626312A10C2AB
-:809200004981471116440589C22448001D42AC22568229B215043D8287666658842229818202614D4324899539C71583E888429215C146086850244D2841439228BF7605141E24244722608141E90481180081141815068400408414A22421214C012D824E225841282002244CC22245D21821C1488CB18942C211448341A4166041C14190
-:8092800080F2D7C12441116901165424121562A119622470410843112401663224428044C12A1028724851869485648281122951524CD28702578420D481921582481014C8441200B012429824842F2C0D4AA11422418B41201458A61E24284541B21802818212400244A1991236144E822043C4818D1213328251862CD142F224814112A6
-:80930000822C067094081602812490244160829230822FDB0E293242C491107C1448C111818449044C42124138211483312446381248B011E442480A103442198491228443028442A514081A92584183021A46C2188031222B42120029F2C99814150411408201804212113A8211C445D224014441D2121024942284415082484C4264C277
-:80938000501221850221008901451201218112886810781C02424C018735142D1170211CC84881830515F82A168C42512215445A2D96BC1312711438124D58124521C46487624118C115E6A23464A7212C42D442815286D0844168841847241E898CC2122071828A522447224C311ACA6141E0660C4F22240115C412161454816B1240C301
-:8094000048881648040044E0440A812E4A443142A42821C249014B8215C48128E11B28672480A82123628100211E4881124232812E482800A2BF960616021281102201502860281181100A1800459898812004484124408432448B21B014021E2828214994424C924A4C5192286821412C354458231222021642B2D90A221111601213414F
-:80948000B81904137C242205C2141B85448B48241FC5384223045120C122842800112C0240C824008D14814971424826081220181202821230424028F86ED21001A11612191402814011531835120821250A2184100825C242201C3144912442114142404616840258122F12C4511008482A84814294244004441E240016044084642210D4
-:809500000200002890280000122146184888C812C089800448283C08004A184208440090124416180443811492145022F04BF41082542881104228022A382289489488A1A9088821887888286820E82432414F34C2484982440620440212200327826A8181C14810889114188120041800BB6360418024941885141241028414001054484A
-:8095800000244100124981D48248140800812044180820445885802802288420440841214118444B21849FE80E0068000085828221448484210440915800144864A29081812120041004204118C2282008502880492251422A180CE02801B08204CF9E0C801122011800104141081422100284260862422184402888048344668251260C95
-:80960000274260C25043221223C2442688044110A8428CA241284128414D225F9A042D4F44481144914A12E22402C0242129022014824224423822842A312A882245C835228CC9118CAC1484D0120C1430424181844885A4148B25840040A4410029023F1C0B4D44455122872545544A27269FA162223B283D238D2347249121B33844126B
-:80968000A123E2C262832A7224DAA8B228E432F222C25F36D486F4212C424FE2C41D4C945445823924822D248A31422E1CCF9C15E884A1141E14424E184B444D321694C24395142E1447486716143E132B158551819578140114C09B85E48158118E8B87264D88A5D6186CA49FC9981CCA4838182372C222748CD9C202C18CA1216B844BF5
-:809700002486B23842BE12F24C4B8721F786CFE126F432263B122C7E18BA82F41C5243D3487138D422A4132504C94EFA8C122431648C8361331FA4D18893422F848224B683548229C5291E422678828AD324B442D41AB548F443444B848CD18A6445819F5EA1444F323C4A9B4283336125742A41DE42F325486CA412EF29065E498383568D
-:80978000AC25DC68AE218E484B344F648263421632224F570D4A8281022818482A81E41281A4924898485CA9421CA8411C2AC181121C0A1C021A029A0283A812822A31812A31812A21882108800888800888800AA848884881FF6A43C2244F42A3331F23D3C6F245798F817151F318488788BF812FF9924A3D8A2F89BDB1F2B92C8FA6F8B5
-:8098000093E95FE8F18F228BC69F9AFE8B8AF594489F1351CCAE928F98FF98C98F8AF328D48F96FEA9912E222E958F92FAA1821E4B3F7ABAF2FA6C2E6F4FFFBA38EF2FF22A3AAF2CFD8A1AAB2C7AF1E8988E262F2EF746262F2ABFE4BC5CB562FCEF59345F71F3667E2F21F113127FF4D6FFB33A715BF33A4A9F99B19F759BF11BE7BF21FF
-:80988000B9987F91B21BF86181BF99FE871C7DCCBF93FEB1E19FADDD29D2A8FC13591FB5D593F1445DCFD9FCE87B2E9E6EACDFDAFDE1E36EDFCFF2BAA3FC9CCFBFB2F27725CF6EFA4A7CBFD9F1EF2F2F2EFAFAEEAFA8F1DA184FCBF9FC98CF28F3A6326F68BBA2BFE6BC2CF236964F4642F266466F51E7115121E7C26FC7F55A7AAFA6F36E
-:8099000042682F8FF34AEE1F26FB4A6ABFADF143CB6F74F94E589FBEF152F8CFF6F97E7CBF9EE586FF243FEF4EF869E3AF22F47E7A7F32F4386C8FCFF42CB3EF63F7FE6C3E785F7FFE3274BFABF23F368FBDFC5B178FC7F4787E4F4FFF7FF49F47F4B8B88FA5F35C9EAF24E46FFE485E6F62FE76724F6FBA72F322449E98CFE2F91B5524D8
-:809980007F77F51C773E3BBF21F17F5DCFE3F172722F26F3626A3F9EB2FAF76BB1EFB474CBFAF9596F54F96E76AF8EF1DB79EFD6FB367C8F8BF7F979CFF6F7ECAE9FB6F6387ACFE6F6EFED9F9FFEFD6DCFA6FF3E7C8FCFF6B5FD4F67E663F7BD2EFF4FFB7C6FFFF7F3FFCDEF6BFB4A3CBF67FB7B4C8F86F6DCAAEFE5F95E5A4FE3F6CCDA22
-:809A0000EF23FF76726F26B7E2FB34544FAFFF2C9E8EAD10022150360084248440484248434802241008890242214221422100816142002184618C14E481041E48C048248C0412641648040044F08D49D014240184C9212184324A19229421A304230483048B14224A01184B4260828143521822542A64452212E041021E24A021230267C2
-:809A8000221321224122012A2404284B4129228162129F260B2CF411248D121F4932481F41B24AD141B24AD141F24A9119F24A9251AB9443F24A9143F2429347822D954F82C4914FA2C4816FA264114FA264192E4A96E5A2E449E2A2F491242E421F497228F2912483F49124A3F48124AB141D24AB9419B24A19B54A7924B84A39242BB432
-:809B0000478229FB2448984FA2F4CC62C04A1D648D131F4116DA41F24A1115744A41F44A8411AF241AB54A2AF24A8143F2429345D852F926482D914D581CD8A64DD1A44CC14A85F5244316E4B27411FC244A1F41F42C42174183E441724AD141B24AD141F24A141D248B3419F24A164782AB14412B344598326F8284F126524F5D0E848080
-:809B80000400000040042800000000128001880000704201400848000000004400800200000042BF660914114D1216292114CA41104331585012201C92121486218C0C48904A200547A84D2156568440342464118004211506322C0189711814C8268CB41884C3144444814CF2C98F304225942A5024114352622E182A881293114928088F
-:809C00001061C284411D18948C52C211C02A44190480724834C3104118538649889422C3086668B214212011644260868346784441722F0E13646432AD111223C42819C4183B2859F21A4117231182502290248CD824A41C143A5428C6082E12F0488213321187428744596C424794251B314288485486AC1243247228D24841D824C34C76
-:809C80004B42224D684E264449E461F23164502211C110145126442302003084A0483011851181588181A44411C0484451444D4240020000C144258212028F2251812D110000168821114818087F370426022D12442602604142C46088460200444032814413C821488148404A04404894549AF222821141501A842217416212508100A57B
-:809D00000181009242002AF4FCA62446C4218CC2112D54412B2146E86992812210F8518818BD948F23C486AE44A41F8201C9B124F88322A45343F4412827424D386982D2A242046C3121ED312A9821893428453924871A189971113C9489A428872426B8248482A8A444FFFB0C501224414313922284449D842288842D9190811022088C5D
-:809D80008288018E2AA41E216483042C034487644728A2215332212D8115A84238498433881812183120C2428136840640F4331CF0422428A93311234424E141E42708102894482C911CCB3449F8224686CB15118D254F2816814444D8147222548426CC221A22035911721A34282881459929441952188551948D9446C8888122C88028AD
-:809E00008EF68D18248F4421064D1844471124AC68821821A4C0B1478199B14261118641E882C1848551364964111BC1661425914D90414470913218186B1A8C04232C03469C215CB24AD1188A712228C54A3A982884928223F43C5B107852912A10034213921426388928495882222881655284280070428828C188902289240251884252
-:809E800029528489044180226442224446084A22C41428106844160222F084BC10418431228721008A21042212840000800271844C82C828C44425480818412CC1324332441001128445422228810182444424901444200284B01B0B7141AF229118F7215146621183C118B368A2848C311419F34A1216629A2CD2C191888591CC2958945C
-:809F000019F448242D28841F441264412F6862463F445242184BA14B148469964244268CC24B42CDC16CC53C521E4C2F49324C321AC88848E777E028B511024C0212C02863862222C1821318480851448428414C12F1482470181442853518208401981285038180A8212B821AC41128890900290281228180027D6F6021122942322816B1
-:809F8000120428C4D028281856281424112853082A819481CE2135688291850549189282606214231201CC141488418841019B218142182E88818AC12A1800F011C5244849022741002883511482008341011694224124181E828748A8469218183744A0846C094B85001143C18510912188414C4426384813046DC2C3421684A824803C41
-:80A00000841682F1BE6820088111292112D8280224844042082214102B724A81C41228C0158441218450184089C844E0A228322122882628B5150412002A2193441210048B248847867EEF800249342845E148045481A2C0414042E111243A822CC118001312CC1222628812888072640121844211641001482822412C18C1112024220285
-:80A08000C814100257BB901240384485026C1104846D288301C0A88952841C21426858884339184A42021820624881188CC142E0D8141ACC181B586041418C82C12840384428184884B0920444143F3B0F488C21812122C1282800708284880B252201A0486083206848815049C1248D52862408283800404458142284140018A081008392
-:80A10000482201188324F222D31065221C042018C11155029870120863918482429604184531494184229042C682418141B1240C841218112444422501A0421C24581231803824CA12C82CA028F0DDE160228748100821242485322480C224C4430251C30243D28284142C841144811903A02445CA2214228722302229011181424688227D
-:80A180000110014242C0347014C828814FCF07C4C0444AA2814D2280041CC42116051C4621088A511C100421224D11422C092C3148260827164D114C698421A81848288C0B3244818D8689B41442F84C82A42424C826AC426B1449F4D1BC244F41B3A413F428499F41A128357614514D3D248CB289E188D9169492DF3D9182467539E7434A
-:80A200007A18F574E18F21E28AECF2129B281E441E81122F98F2247EEE848F21D635C216AE269791116783671946C9285E5C8E314E548F89F2131185F56159CE1269D18CDBA2B494F93A8C89D514BC22F589980027E935FC4416AE286761C3F2292825E82AFC2A114E8B87429D9A8D2E2E84C14FA8D884F88E183B14AD144934544BC83E2E
-:80A280007435FC849B1FE4F482824823B51E62822F41B422B45AE422D23AF248149B2643B23355289B418C22C4AA1E52213E288BAE625A7A4888F424288B25442FE30E3F261438382B2125A2161E282D5626538C49B812721242742591221F7AB333817341F284C886F8E19D9D24B354B47E43B1EB18CF82F51C868F1888F48715AAF85460
-:80A30000215D892B8847431D614CF88994C7444B2247C687121DD3837487F81CA44D44ECA448A22F62B6C4634DAE1CCF84F2B62110011110B144014724A0148262200442124E2482440040044604461402190118421800909210821402290826210882200110088110F85E1E3437587F5151845F13F1DD4F4F6DF74D4D77171D513F23FDD0
-:80A3800041498F8AFBA9D9BFA9FDD2D4EFC3F14C45FFDEBE97F9C7D7FF8EFFFC7CCFC9F95DCF3F6CFC263DEFE1D3D9F195D4CF4FF625139F8CF48E98A5F38AA31F55F6B33DF7FABFAAFE8CBD5F7DF79B2EBFF1F15E4CEFD5FE5BD33BC49F6674C3F74F5EAB2D8F2CF866C4BFA8FCA94A9E8ACFC2FB3CB48FF8B8880127613D67D5EF63D5EE
-:80A40000A8F21537CF85F577279F21F43B5AFFF4F4FAFABF39DF5FF4DFDFEFA75768BFE2F34F5ABFD9B9F7FFE6F4DFD9FDADFDBF8EF866BFFFF7F35FDE3FEDFD6CEC77B22F95F6CAA8EF6CFC828F3F54F6F3BD6F7BFBA9AA8FAEFEDFFFBFCDDED9F46C686F55FD5FBF3F87F3486A67EDEFE5B5FEF4E8C26F4EF4C2C39FADBC94FC6EEC4F54
-:80A4800043FFEAFC8F6A47F252546B511F91F33238E7E1EFC3F37D157F53D43BF3EBAABFDBF1F9EBBFB8FBD99BBFD9F97DDCFF5AF9AFA97F29FBE5EFBF8CFDBEDCCF4BFDADF33F6AF86ECF6FA1F54F5D5FE9FDEF6FCF8BF9889FEFCBFFDCE62FF8FBF3F51F3BF7AFADFFE3F3283FAFCFF779CC9794CFE1F4D46F9F7FF78392BF2DF7C795E3
-:80A50000FFE4FD5A6E6FEDFD464CAFA8F4A88A4F8BFD7A54CF43EFCEDF51043F7DF53333CFE1F37A3EFFDBF3FD7FEF47F33F6FBF11F26BAE9FD7FFA92BBFB97947F3DDDBDFFBFBBFB7BFA6FFEFFA3FFBFAD158CFCFFFB5B1DF9ABAE3FC7E4FFFB3F5DF5E7FEDF56D6FEF8FFCDAFEAFC9FFDCD6DEC73F7DFEBFF54F5BFB3D3E8F83F3BDBF63
-:80A58000BFE7744FF56C6A4F7FF7D97F3FA6FF5BDA6FECF94EDEEFE7F7FEFEEFCFF7FAFA8FADB996FD7C744F63EFDEFE353B5014C0117026032E13843440220992340084249244928B24820089024249281416B826084B92D0124948C2482A61814382049E48244814844CE2889428928F440246048F310B5828E11A021004818E242450D4
-:80A600002A419853880225457848114415D1581207294155828F4132221225388121702832112286D41421512A15041181419800128004922845E8680A2D421F41522A1F41724CF11124EF24D141B24AD141B24A9921AB9451AB9443F24A9353F3429557822D955F82C4915FA2C4857FA264515FA264596FA26459ACF49824ACF4D1243C14
-:80A68000F4912485F3912CA7141F49324A1F48B24ED141F24A911D28AF145985AF14B924B44A3924AB944782A9F9244889F9244A6F840A29F4116CA5F2116487141D28AF24B111B248E141F24215F04AB1512B9443734A133142178229FB274829F931484AF9238A521FA228F8265A14BCF5C824BCE1CCC2139E6CCD418E2CAF14F191241E
-:80A70000A5E248F64C131AF248971D2C4A13D43AB334F44812224E964382B92694122E529F1E0B848248000014000080021840084200408101880000000000482800002008000000000040018F5606801148149A1481844B34412E828189815181B1182483D2816441264CB441488C8681722844DA28D248D242D2420821148912125481BD
-:80A78000144696188B249C011954841C0C8B48433A5C28830881846FA80F14A225223114288661218136422182480745328144142CC241428B414782217022111482420430182936412112455B294CD128C129CE220013124851A4A23C0214C1424F8CE211C864CFA703A02D844941441449325449922523B228682150B29824A02477219E
-:80A8000028124F111EA21A271390228127421594262D18A3167142C11A15061524D141A4128B24C113E2925448C924689E8E244D1849C24A89EE91B814F6826540012502A9A12182163828122948881155184114418D211528D4847448445848483024852412782208490829042284C5638185C328AF24081C0110C183222460148488411E
-:80A8800040F8A849002008880080080000000000000000000000000000000000000000110010011400775E80D42212014C114CE34412E684F431112840885A2A4392454C41E1226A811883D8319842448D88289631112945F48C884692439C0289D44421C483CC12BE4164128AC294D08C52223A814482F122A4160883F8E5B114B0411248
-:80A90000021885C4236228652CC2511341D828181284A49A455612888C329C643D5120D198021D4823CC44CD124229881251884C11C4A5624D2227811F128114489A8210A4583E826504848922F1154C002008880080080000000000000000000000000000000000000000110010011400775EE022010083021800820010052E484E84821F
-:80A980005411280017882811100224128844002C483428001A124844011CD181C211411812892889311488008AF456AA50141436181E72113822158836482B18151878D2D218C486815C34222C4435A9A618748332484C4327C3812E872290884D2213C321199114991A683A2CABA182A9E221688C13582190222226C4AA28C3C914F035CD
-:80AA000069702442415884D021810362C229088467291364684C5824281428833288B48A528264543286C296A83088456228119391141CA212941816019382334314008091244301C44482CFC70B1C012C439228844009841894C041848C6684195C412C44958128431891412A41021426014180C2312684028C18E822D8242A2A98128D20
-:80AA8000818C69481C91122DA88A82E1A882AA1818421FBD4E814421C22428244218388C61121849A14811A0D280081C29D148021881433818594842713CB112E2485384884088022442C024E0824112C44F8A042C82A48368244A01122F7F06121E424418441184A3344148403886CB12104308830244442541B42401924C2212342C1456
-:80AB00008A0422214782431C1114424C01CA2208493922A084866422A4834112B82861819FC50500110023010044A122141088011414848189081400464131128001813041111002229922D2224281011B424608448D223018008800F055A6144818303410324AA9E411A6412D21AC23618D30118BC21488848D15982619141428C5164329
-:80AB800042742429B21A88EB741241D4C28882C223AC24C225181AC8614A516BC26A88D22AA4212B41208101AFA908181167123024130112401C081C18543880018D21805884441128407521681924124D184A1204882810512484431211A2688302A9884444D8422893882688C8488942F8A7CD80249514810080041880A42411844E984C
-:80AC000013E818A184148100882288110019282881082816041B811081D821822322880888188418288088A8821A048AF2B9D9004400241413615185C3218813C28240024092280022850346098198820050188382210280C8220011A45094282480B82248C89826C22200008F89091C42486142228460822A04484628419881A82C518434
-:80AC800093E1289228251408831214888182911880828128218948682A84248CC1221B216011A48124002818C0222228485FC90921283019420012121814120052A502260116E11108902498219828908114AD111440199221B04192111B121901400884C01144814041020088F0ACBA200838110012488098248841001811444902882259
-:80AD000082A2400420484444644254874326744865414C4264424444445C9891201811882982228221A14212149F8F04430400A384944422842A04801441C841288246811442C12111141C1101008A1109223081281B421002281C9881001318A1281908821282E028A41824486F8404840000112611331181106218980018400210A2417D
-:80AD8000800100188120C81881002448980000819028210000848502222180047F24084149712268422283932CC16289E882D44998148384496182853284281933852811412216848262419084141381788138184414601180A2811880312420011280813144F08242E0C3091783221C041200001486C12485A12880D22208B01208101485
-:80AE0000A4181681180221916018611484822A1448648841845126082D2C1981421148044400702224F224342449B588A32145C4424243A662897349396C2E214B2C8A9188FAE333D222F248821B841D8149C22169782804158182C88860189225F9182A1B319FA2B114FB91A126F32121148E214DA8148E9C19CA1198178884898AA393CB
-:80AE8000A6E224A8817C82F25F67F0212426B4217129B96873187811751A7C512BA948978C9F51D188E828C58BA9F19C882F9314F2323827529F82F4A125CEA95F53E88181A1233F19F1889F8D9489D841F3811186E5117221716824F89A844741B78397683B9395E311D1C1781251382B29222658621A91122926B282F43B8960144B4184
-:80AF0000E5C132D01192385F14A1422ADB119AD22CDC117411984B1B8815F58524BE33872813C89450211885B432285844137115E8C2323C2E844B82CE848644FA15248CF121224CE112F1882C28A782A612999489C91C83A92829E24AA616CA2DF61D212411248441842184211062812184250140088440484448C44A400A1D1A5024D0A8
-:80AF800024014D125024901C100E6928112611221132142143111204430143019F224AF144457741AF51F22872AF82F13B23F7F2FF76922BBD23FD8AA722BF85BDDAFD5A78AF36D798F38E17EF48F13B323F83FB9819CF1E7C187742FACE1AFF73F229A13F1352EA2F99F928ACAF8959FABB9B17693729BFC3F219533FD2F2A3AABF61D1AE
-:80B00000A1D1C9D12BF99A9ABFAAFB9998FD1FED3ECD16CD988F6AFBB2966F6AF986825E14444F4BFE87B5246F14F6662D2FF2F262786AF733337F16F765259F14F61B2B3F51A8131F57BFD2DDBBFCBBFB2F2BFB8417FF7CF5232A3FAAFBB919CF2AE8DCFDE1A9DFA4F13F261F93FAB311A7A8BFB9F9AAA9AF8958AA3FA9B992F8F1D18F6A
-:80B08000A1511B9F12F2A3AA3FA17111F99A88BDABED8C8F8AFAA3A137212FA9F8B484EF83F8A8AE2F69FBB6B66BC82F47E348F8A4F6AF2442F217645F63F6382DDF73F37A5A9F17F62F2DDF56F249639F16F6CBAD9F11F3D9BA9F3DFD585AAF36FEAABBEF5BF1F65E3F37BF3BFB963D4F9EFC24B5CBCA4DCE5FD3B232F2383A54CFF8F88E
-:80B10000AAADCFEBFBA8AC5FFBFB93855F4BF6A9244FF9FB2327DF4AF89A947FC8FB999EDFD2FB9B9D9F88F991B21F18F99B99E9F318BEAF8AFB14926F2AC9942BDE4B8AAAAD51F01164CF73F6282F7FD7F3787A8F13F36F7FFF56F2697B9F93F37BFBBF13F75DBB9F3DFDD9D9BF3FFEB8BAEF79F1555B3F2ABBABF9BF354F8AF8E4E5DFFD
-:80B180003AFC1F465FC3B2B2F2B83A5F78F89F8DCFCAFABCBECF68F887954F48F8B5F76FE8F996BD4F7AF89DB65FC9F937ADCFE1F92DBF9F7BFB2A389FB97B1DFE959C6BAB8FE3FBAAB84F21FBB6922F41AD574BCE4F4AFCF2A600A012E012010014822282004048224832912880228802000080080088A0826012C01100841400840040CA
-:80B2000088024A0200277130A4001122284F120122841468462128241B022C220282000000288885352460821674240118444B823024206248812888400128122C28082242A6F13895C0421F41522C1F417248F21164A7241D64AF24D141F64A9219F24A9251AF143925AF1439252F14F924482D915F82C4955FA2C4857FA264116FA26402
-:80B28000192FA264592D4A9E242D4A1F49D222F59124A5F39124A3F49124A3F48124AF14D941B24A9921AF143985AB94478AAB9443F24291478229F9A448984FA2F46F2BC0411E6C8D411FC112F8116C811D6C811D64CB841D2C8BA45D288B8443B24A6982AD844B42AD916B4289B9249188988DA45B428718488E251F8264588CFC8924B8
-:80B300008CE449061FC866241FC9E224E8C1F248921F41F248961AF248B61B298F2421FB4812224A69832D92AE48212E58AF740E848004828001420054800200000010020088004002140084800400120000448002004008101802BFF843022D24858162864A9211A39415128B242A011A34482F121491138F220981281450189423B114FF
-:80B380001288A8282082C22128121C8168484A0A2548444363162941C181484D124A2201A28D2480F6115A1443A4184453416211812A4152141C09893C841818818E64C0341B4897488A62C221439225114D431B24112AA14860488AE162E88218147212D88438211CA8121A1A9881A1C12800886884C01141AF684E7142B442518553C2EE
-:80B4000048769111A9361541A2282E844156A84215E85461882742AC4C1C2141F98823432362842B4819A821A226D118A8285678138818E4895448218216B214D2A2B221115884684129A481228B288382B116F6AE16004C0212260281122413F148111283A449241341228A234131A1A847A2104491155413820242C024188E242A48D4A8
-:80B48000228882D881521419C28119C482111C081822800441007FBE024054143024195428112981B44281E42421880125033800A23081541008C625321820A18256C48228222883C24483028112A0281480288302296A8810A484849F524DD116A3212B1227128C753AB4172664BC197221EA28C1891D4827D428CC28183844464C784982
-:80B50000648642816A912A2CF248812F14F22A82434C828292152958A31B84A312E615F22184872C8124848E14914344E85E6124284AA34A16AC82AF810625C434712D21838474532844039F24A214BD8211678428B30883914446841AD4187441447848024C08BC04238C58422C1AC182112F28C4222880880828254884E842246229883A
-:80B58000814AB224A8C126F83233E011023290347F81C22425E384E9328421A8148B48190141292802818446A9280032263861AF32AC21A638142872E0612262828D214D48C11B34CD211E48A182118A5118188159A6242B8212488564286FF944B12624938885C15A8C819448324200C6649690268C88C2812F4172831454833CBC440915
-:80B6000097488499921C8A44092128488483042314C24242602384284502467822C88C4608411682034F83F8E8C51091462AD124C2241428806482864818E64211C18213C41548464188164284D1142A018880C241228094818C222582328CAF484204A18E11492464121842211514C828272881481AF45539800186810148404209C031FC
-:80B680009182441D1841100C8068452240782292244904D143A11C8A16143212144509002AF18A410083018E442021B481A138102828023F294E4335348CB1257112B81A2484C43842608393F4C518116F8158C14F11D28484D148A84859218A382867114CF2C82143F184494361268AE64492C12943D81482C48E8744621314F882188310
-:80B7000045625C839548AF44C8948B8285341A8A83E284F83AF5E022052641386411228427148C92881129084413B242083CB82554124332485D424614952825484488C248920021C011842722E0226841AD821A428122042432C04818228884424712BF53034C614D1840921870487124012240848C084A2244C1221588C8A1484B281186
-:80B780004012286214A0822482244498811508882982648C3088221823082844AB4812211280FC7AA1004048982890511284C11413C14881221641CA892F4208281C3248A44226842804142022042CC68432214AA848283088131102681A0480994242A084C68828015FA40422834821032042880228822308213C0211C0884A3A48842066
-:80B8000024080080622290411A2481F82816004052181902882444111A240E288126088CA68214BE8A0000602417C2247041A268312810C448008E4C4E280040C224C0511C88410110489112E08C32418285243882A74444A0248D1220284C023A984220E8830460225FBF0D40240187143C016C04800C8A44A1488849846228832288A2E6
-:80B880004A10B482624439049042800C40A421142904004002A04880A1382C02244AF8144220C3423044002A014A018084024008218AD4240211004425C8482002874439281A01E028848202501240E2840200C018B80011480028160418888C21F2ED796041118B421416A448178111818D31211F845218A90189261282240486144275D4
-:80B90000A20110A8C2004041882204A1411146B88282238888941823CC22148CC1588428190230828E422F8606288280226844000044274810144282885122480000201124B822B428284208191422120880C2291D445C44C82281222044222458424008844E21F07A4C6084811B4244162482024243044C149122816D4884441D188819BB
-:80B98000043117848C11B2480AA014138851182840082A641A21239C282CA9A5C0224C21814A08407824012A885482816F66084CF1814893421C38A82A2581F4286A27228B2435F3488C844ADCACF8648368C722AD2910784C6A223EEC89642A838CA42884ABC817A2D8BE862D282F6A532527841D424F24D2147823C128278E26BA42A214
-:80BA0000549BC93A03CF82B2AF34888B5189E817A166E79A1443E249011B141FC9F4124D35D183F623212F4419ED29A4C44F28A4CE6FA23222BFC1F42A818AB421784DE8B298416D854F3C51441C04156A148F2A45E2110249D624B811F8484C2CFA6A28AF1854C88F24A9CC8B318B88581F2968248F28084684FB24A92F84E8867288EB54
-:80BA800028F82936A061C9E291A3234F26B145B3587248754C18E514FA218187C839D12E7219E11426F8C11E2F84AA4CAABEC1E652B2C816F341235E883F12A6B21B42286AA2442B2623F4315185B882FAA9418AE8C2B8B3A769AB122CB852B79448B122B142F4FAF22D4246EC25A52A9A854EF87B4920641240012642E822014D1148189F
-:80BB000080014C11C1240000001181B018025221830181180060124001344002002484400812200112811B7CF015414D2855AC41AE2C9F977645D489F33135CFEFFB1B188DBBAFC3A1153F35DB2291124F46F334BC2D8875D755C681CFECFE8A86AF2AF3323A3F31F59B919FB39E139FA4F542481E5B2B196F49F1D6149F99D1FD5E112F52
-:80BB8000325AAA4F21F1281B8F81B154E125F112923D133F34FA62A22B8ECF6ADA47F465462B574AF41818A7815F240B5F55F464784D1C3AF269E9CFC7F616759D7BBFD1F3CCAC5F4CFC49BBAFEDFBC88A3F34FA26561F3EF9C5977F45F968AAFF78FCAFED6EC92FCCFF89C48F72FF222D1F32B2BAF979CB3BD88F92E787C74B2F85F1568A
-:80BC0000525FB1F5191BEFE25299AF9EF88AAE5F72F329193E988FECFC9A122F6FF783532B9CAFAEBAE2B8ACFE4641CFEFFD3252AF81F598D9AD582FB147F125614F51F62D2D8D389D3D9FB67277FC392B7D15CF6A5ACBBF95DE8A7742F84F8FAF37F212616F46F372FC3F92FA272D7FD4D699F82C5E9F5AF86CEE6D2ABD6BBF3DFA2BF925
-:80BC800095F9584B2F88FA385A2FAAF686447F59F5B93B9FB8FAE1E13F12F26F4ADFA7F13B3BAF89F3F21E7E3A4AFB41133F3CF4F2822BDFCF69F9AACA7FE6F41A982F86FE18988FACF56FC5145F55F53D74DFC2F31939DFD5F77D3FDFC5F65969DFF4F5FFFF3F5EFC7BA9EFACFDDE9EFFD6F87D6FDF7DFEE5B73F55FF2B89FF5AFCAFEDF5
-:80BD00001FB6FC646EDF5AFE3C6F6F84F6797BBF3FF86BD99F9AFE184A2FADDFABF4D2B26F2FFDBFA3BF39F9ADAE9F1EFCEB897FACFEF73BBFB7F332BAAF8CFC88B26BFC2CFCCA8AAFAFFBFADAEF8BFFEECA6FEFFE1AE82F83F4988BEE6AEE19C0112042981448184826E188642284804486C42219544848812024A82411461412084A2283
-:80BD8000222422240229012A88342448228A44E289049A4422088A942882832428049F420E41121430281508100410011002204106284889120421400229180800901216542C008281C0811221282420240241213A04221824EFE6092CF4112485F2112483F61124A3D441B24ED141B24AB981B24A3985AB9443F24A9143FA4A95478A2D24
-:80BE0000914F8AD418FB244A1CF8244A16F1244A96E1A27498C54A9E24ACF491244DD21F49D228F8912483F49124A3F48124AF14F11124AB9419F24A9251AB9443F24A9243B242F9344829F93448984FA2B49C07241FC156281A36481741239421AF249121C999212F441BF442B143FA4214F04A9113D212D98294986F2285D824E511F8AE
-:80BE80002442922E4A16C4C11E242DC31FC8D224E5C956289E4483E4C9724AE14832421F41F24A941D24AF241BA4B443F2428243C28226C8846F8294886FA2F55CDA008248000014000000110000001002008800000000000000000000800200000040014FAB033E42C01226723C6243361281E24882542219084D414A823188881C9382B3
-:80BF000028882E44288346743176A8D2A114014B4A2D462C823E11854243E1E401902416E128839341149381C24C6E924BC22161836444C3F433E92415E41952424921642885810129240A301A98312229B4421298244841248280014044E82403284415828A024B418AB218A43C83AC2421508283C8842B8123019C21A286388621F262D2
-:80BF8000EC9062D692142B2149634399921326A2244B24F0228116F815421CC23242AA6493A68292844F2186688E16B4118878471AF91122864452482F3A641F8425C214CB28428AB544D821B184817262918857882F2863443AF49A21D026A6161CB814F28246D034912140744A2298120086C48240028848608821504248002800472287
-:80C00000890280A4246B422800221146A141A9813228682622111881018921686422888446C4483FDB0C0000200100008400008B1410021840A142502400000000282C818208000042000019840100212200001F6F0C181440840448248301C0228144892472824104281160412400902888D04248CA24A400116052811C025C9211148908
-:80C0800081B282458218B482148415044B4244C1A75380110144481248901200280084228B944180621150412A0424008290862422842824004942982150411414890192192449840C23140449125484BF5303000000008100854248840431240000121042048902008144102261128814008082058092422400214118282004F045C40017
-:80C100001044041160418400501881411128588841114008444084014044280400400118A08416148801828129810422188982040082FF8A0C2922E2220125D828C44484224003128014082542381828120010010049D1220240C45441184429081400A23088001400124842841222488372F806152411024B212A0121442588024813017C
-:80C180004004008002220010D4248202000000120084004582120240084C18480844428840F4A9B190251AF22214212931782314C226811722E014118914D124E2216488442681422842141194144D221634268448200530118840A884128E2A1AC2888885528142418962814A924C1A840A4B287F2305210044C3121164C18100102841BF
-:80C2000044080016081200000020022110441424512480110144411002200182184881002044F875B6000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0048000000004480020000001002188008000014008480040000BF
-:80C2800000400428000000002180F1F3B5000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000077
-:80C30000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000005F
-:80C380000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000008002000000000000002014020081200200000000000000F075180000A0210040C288C082006C
-:80C40000904226A48484100484902440A841428044148848A22870822462488180C12480C21820048428424382A14280048FB1071B216449622210C2268128181140E18C51411F88413211413924C21119145128114C14922C13888281B41482341141142414604340938814C2148A41012C68882440A4188922F822ED80532449829212C1
-:80C480003024812C62811110A2949052442944862442619490282147242026A8244489848BB4134A14861246A821409488C048800184284843024B2480063F9E061400602240022008821484541788281319184124011144118158851401181004001C081C0841122603262149A14814C082864822019281828FA4076502C961412642C464
-:80C500001244801628491194889028803384144312B8840410382428902822808192469094284382220442444088088122252218A2422008A2AF780218456312223F4461234D2119D586B611C82125C94819E131F4489582CA43F84A314F85B249C82194CE2D3F2284B24291441B9269D1684824E844E8188102821CDC18ECD992262E810E
-:80C58000AB847681D28114E25C31CA478B8CF62412E08488D2484AF869F4241214398112E62231111964829E412C0250148D12118028B192240622C24F286426812A4534212245028A11848C1204A8224F98042A68485A0224C048224BA18CA621428A048E2883F27BFE4046C42C16E4364134242761432452811F813849121B844F89B412
-:80C6000028A85289922D4D19D34E591C87121422612AA481E331A844602E4711A0188AC2451DC836624213D4824491284E89D014F94288258A58622284A841826FFF0146821411488CA124843514C3131E414E8C32422372A498552511143822148D8218144F89C2442D2822C911A83C89C41813C4144681819422C481336822501C422FEB
-:80C6800012C4444B424A0A8266C412321E488F24F2F8710048800280810212204234214008802884188892424A018222882984CA214522088884522890148084142464244126442A1902448127644180B1C4074149311213915125448484220290128A7418542152801618024E14805A8646014344140100268402CC183924919223020014
-:80C700002AA118880018610089B8484824F853C614437412142262E41243934860131125D182611942A4266C513B2800224717818A54C266A9426D4863F4211483E24C91C22E141B4A4CC11C893324471116EC22042034688A1544AA41290A43C86E8D144CD64814F895E940081C7111C811444228673280A1614A88D46831214A8924D4BF
-:80C7800084948A84E02884126141418A223288804208001C1861248CC282844E814C12321125B281644443EA241104A0849688A14AFF9E0A2822A0212810581844141381082C882162124220A242444D4143A1C2184034412AB8C2324842E614018150942442A908214E8582484241222E48B044928489848C2808A71C4052244424D048B4
-:80C8000084A425684314922A4C384110031D225813CC98202202402282C84C168882092CE848B4114224C8819624B22241842194118431C81844C04210B42415D484F4453724A01425C2448551814712C01382818C88C4847082624150414154A081008B242D14196843102148042694224428681001538931381892290130142D12A440E9
-:80C8800094241218825A4B811441483142222164288048D112C1288844884C811811826782481C11446184A1C046B028C41A48148288704804116014501600108A34E818181A24411822F26E2AB0810200C0542448181A5416124E22C011122C1241A1418A12249442A048812B12148E148CD24881C24220A814141908121A924442486026
-:80C90000144392981C223844488614282428C459DF120C404461822410C21441C0A24C22891214C4814DE8ACB18412928180CA84C119184402291141819A2420B814048885048428218800284308212AE82402A1422E8849F2AD638001C149A112000044002081944840A2289041005413162144A2492611818249244814041091411041B4
-:80C980000442440010084008128444F07E442444A118C054C0141092B11A820115D412A214498431241849A14913280828493458C18B41829E44301848621C228322863A148A82982126827241D881741499248C1818824B282214F29267C0481A82144238231394211314424814923244A22981281402222911C11415B2182808216450B7
-:80CA0000944041088A4444041324B4114224D1482899A448209184831224483432B06145B162F486529578347465B841C2681D2A2E641571112BF25112BB411953682AD232DC1357119B7149E248AA328A4814B368F44882408DF8182487281F74A8265E29AAF881284C948D4F21B22962434D61128A7C14D9E8C5B92C64838D14CF23D41B
-:80CA800088B446E9C2F21469EB843F3E4912419D162D33AF21373E186F559512DE54AB1AAB312F4A5C7446B735631943C78A6F4F2DEC57F871525D854B26CF94A4456F89FB82519E1A1B2D2D1447864F823E8277485B825D142E811F8AE848F421917CFD4591AB1C6E944E338B94119F44F46814C9F144CA2BAC367428B484ED4CE9C1F415
-:80CB00003C55F014223A423648C04F77542257356DA249EAB8088A39962BCC7F44F98934474F2CF226858A45A94C1D451F2AD3FC417735FC6EE5EF22FDFD688AED45B12486EC48A121474447345E334638D46817631F287411E822F4848143FA14A82F4CBCA242BCC6E1893458222AF23BED100111410084000000850481115081508140E8
-:80CB800048548110810210010014005018501A48A501A5012501211002205128128100BF6F45F145654F26F3282C5F31F45D4F3FF5F37D2DDFF4F517711F1DFF9A8ABF98FAE3D15F7CF88CE8FFFA7837F58D695F75F4A7E7BF78FFA9CD5F54F8D545DF9EF8C5177FF3D644B814F1A1777F789B62DAE1AFF5C9C71F5CF4D1858FC8FA8169C0
-:80CC00001F5CF6E375FFFCFE98BE2F45FD91F11FB9F3393B3F13F556D1BF38B812F1581AEFEAFCC68E8B334FA4B9ECBDD4F1DCCA7F7C4EF324267FB2F72D2FE7E1DFF7F41A3EEF97F66D6C1F34F4F1F3FFC8F98B81BF9D7ECFFBC7447F3EF86F1D5F7CFFFFDFFFDEFEBFA5AFCEFCEDCDFF96F5AD8D5F74FC277BCFE6D27FF1A7FD7F73F322
-:80CC80005765CFC3F9545EBFDCFCC1C15FDBFF899D17989FDCF6BB3DFFF9E869F85ADEFFFBFBD73F9FB7FB1379FF1DFDDFD7EFCDF97C7EEF8EFEECAAEFC3F76CF8EFCFAF996F2BFBDB56146F66B636771DFF3F2DDFF4F47B3FFF57F64D577F15F7C1F1BFD8F89AA8AF8DFFCF8F3F58FC85B67F59F9AD6AFFF4F5F7E63FDBFF2B45DFD4FD42
-:80CD000045751F5AF82DAF7F53D7E4F5F4B8DF7EFBB7A72F14F6943CDE521FFCFCE1811F12E588F8AD251F3CF2FD29CFDCFCF2B61F65FDBEAC1FD9F77B7B8F31F7D4DD1F18FC2C72EF2DFDFEFEAFADFDA82ACF8CF8FAF8DAF1CCDEFFC847F22527EB3387E1EF83F36D5FAFE3F37E61DF46F751531F3FFEAB2CBF9AFBD351377C7F6CF5FF85
-:80CD8000AAFFD7F9F5E77F7FFD67F77FDBFB68445F7EFE61645F5AF86D6FFFA3F7766EDFDFFBFCFC7F7BF3427DBEBCCFECF5C2CC5F5CFC3DB55FD9F8ADA51F6CF6B5355F5EFFFABE5ED55F5BFBD17DBFB6FF185BDFDDFDDDDDCF6FFBFAFAEFCEF6E4EEEF6BF7E6F8CF4FFFD4D64BFE2B8400302260220084228A64228220492201928130B0
-:80CE000048924A22A8241128290111B026280442471230248449C8482230248E481448140048448A440485048F4402AFB9084F1A15416241414865A36147141A94821246924414325CB821F4421613CA14405584148487448CC1252F826D458483F12482138C081C0914D01649D8321801112B8416D8724818A843A9A84180948847181F79
-:80CE80007F0F4D531F41523C1F41724CF11164E7361D2CEF34D141B24A9921AB945B48AF443925AF5439A52F547925F842955F82C4955FA2D458F8254A16F5254A9E251FA264592D4A9E244D4A1F49D232F4912485F3912487341FC9F24E831FC8F24A931F48F24A9319F24A9359F44A9343F24A9243B34A7934F84A944F8A94984FAAF478
-:80CF0000A6D8C0431B618D531FC162141F81F662131D28AF3481F242951E28AF149B64AD911B42AB9413BA427131B842F8234829F9255A89F921C2121DCA9AF2214886D4B2E559D2A4E4C9D232E4C8D638E5497268E341D234E889764AE349F26A871AF24AA349F44A9343FB4A2243B34278B4A824678B886B582F4F0110020000000000C5
-:80CF800041000022000080010000000000000000000000000010080080F2A3CC001973194221B412828531121B6886B218B241C15430518E14B06138B9188C081B845081E012B4C2C21445D8229814382F11820C1413F844122225034B2114211E2185114871262264234B823E4483A84A8B4A644F464FA23427282247811D14471422C9CD
-:80D000005241852233818485E1281198292A11724692E11D448E3843026B242F76115478C6311156E4849A84C6B417B211E883781412D84188C2AD8CF898441AC8C88A7443843488A82554288126544816E188F6FDCA242827172791671113E54124953C51C693141CB128345C1287114F1249829EB22D53D328F8748170E8B45112762792
-:80D0800058524D181D424F8284DA3E7FF1B4C1E18162486784A83D2243B81CD26118E418F228C28146C284AE422C7128F46814CF22386C1E888F27784205582042582419220229C1282E828E281C11C182488132145D48A84889035023441B42C2D8146929991400C08113C11215041D28881E48981E4814594461822143C28200824A123F
-:80D10000746A0A221E2422008485A1414D12828B841349211118744272319828324482A8414E21407121084D488A02A042122460128C52128C242601124A814221C182414A0A88120060283F5C0B49457211CC3A97474D512C568426F128123C12A818866C14AF11E48328C8863CEC8A81D441C441AC18B43284F18336223D48A9B1847175
-:80D1800094625A33E232C882828F628C981F8966A3471A13E2119CC8AC3C414A42E4A47874B2C4E24492341E8CC9F2F96230444C91112247141D5C66381A1564288F2478112869C89494ACE118C2881C78A28884541415084883E32122B28834184130832332811942FA89428E42132181B312B821B58136498F28852832C48226346249B2
-:80D2000022C118A6FCD51A143226D2483218278340C1441AF212281982182161241E466A981843B2423314884F1288A44A612F111271827544CA21218AB1E4B11442D1226228A84C42F84428831698258081083CC44422ACA4C1498934244308CFE7469132244440983483028B42830446C24483C24226C8324C220182163822822B1A242B
-:80D280008622F282122422281058245645EC8438B148259D489341642251202D12C41250A4B014744C3244449AF6EA7E90414816713438414681D5522221A2A11343A4C29741800886C84A18446561844244AA9148442A94818751214A99612426285486A01821611F238444B81202CF32C14A83028AA21281288D921E4816F8BDD60023B5
-:80D3000032288052228055122901818816024615628520531448121100D1302883418224810282100420A2216886B8848145113282124AD884274468221200411E7CD02125E292C11846F824518B247CE7149372A2AC87B448D9499426A24F85A2188F218629E41291412A44D285E284D26A2915316A128B245C36112352A4B8D078E183B5
-:80D380008466CC4F2834193721C2C738C9B54AF246284E2A89F2483683775468818E44BF4F032302614C6232D02201818418118890121D482D121008544781448E1A884112212826AA284D12149890C64488156C248A427211EC32A1214684C2121220893184184024684426FA89D8201411528219414568842248A5C463C49042224812B2
-:80D40000382C241861528C2368A14126942445C921272A818841484883A3688190848118414308002302161424D842280812447FFE04101A8C82042110228108221F84911118881181229C028480174461188603004CC82248141113480188244245A1241A6441633A44848E18803418802118089F324581A14111841122141C12C12119AE
-:80D480000188421348D21841021100830227241B12443483042B2C1C6211200C811D94278450A4442D78A0142221442B412412C0220021004AF3EEB700264254348564814A82B418044821198441142222623883082263081C012C0C806241822601112089440413446848A1A485C124C02898414C0C002A3444001F4B43210A12285244BB
-:80D500004021814C882418A8249C2A24A2417028830430232214F081146021604813822868110082448068289088848388088822124C98220060183FF24802112211241306182227134352E1898468814A4121844294844511928118C688D828C22222A116C4238E542128404264C2284E8810C484214C029086809C8421414C88B814A20A
-:80D5800042AFF30F400444282442284220040000841B18814820084008810041009C0141948004312130211820A4C1291441410229048A61812A04417FB806301216012D24403114D048C833811C8188DA21288828582920CA829CDF2858412261004501100229C424818661284A0845C24218163748241245C22410A261100246049F8708
-:80D600000A3F8482D228265128523250182522684A9021304A4C21546122405812800188004078114E311D1CE2882244C4224E25242880A282C084124DA85230282A18846146412B82829FD5041CA63A2125F11C7372278217928F85E69AE8A854188D5440B1DA7B91F1D12322BBE2821F82DAC5583123F8A318486D213F2B5C661E32757D
-:80D6800079B2BC3538843D214C7E1583784CD23438C68E824FC4B14CDE68A1D5444B18192BCBC42DE287412E166245645744FF1C4A6123B4CD153632224D571C85A1126CF36E952437188B19EE721CF46A48489D2D418F1258142AB29A68B24F41541413D24422D2D5ACB8B88E331F54A24A8F11F1289437162A8A648255246A29DADA2AE3
-:80D70000D22653E9524D84AB23E2CAB982F8923CCA98B84F26F1FE342423F413441FA3D2CD72419C2B1B245E6615B353B411F2E3684EA81FB4BC1D7821CA942AE92D69B47D2A8A7488E182B749DE18D2E3C28E9499322A36562C2D4C29AC84136488CF687683FDCA248D86AF867712F322147D49A6B8C8B8527C86DE8271C4D244D1263224
-:80D780001449AC42418AFE265140040084400884002008450841800470480483044220044230483048008800488044C1481484E08144C14824008C048440083E65141A51E4CD2A8F32E647F4281E7F46B221524493F462D22F22F67BD84F48ACF49F7EFEE1F5DF8E7EA8FEA383FFFEAEAACF8EF4BB899F1AFA8D2E7F74F44BCDDED11F3EA8
-:80D80000FEEFFAEEF22F64ED18D96ABAC2FC44259F82F22F49B5F9288C8CBCB5B9C238A64B6E4AF432126F29B912EB4DAF95AFCF358AEF47B412F938188BD1CB44CF564DF162424F65D4ACF2193B3E649FE2F1474419F245669F34F4761B27B2FF85FF8585CFC5F5DBDF3F4EFBECE88FEEFEACCFFFDEBEA6BAE5FEA1BA3F3AFA45EDB57DA2
-:80D880002BFDB5B31F7AFA873A6F3AF34AD4CFCADBEABEA3F8A43C8FEA72ABFD4F69EFE6FACAC65F23F1D294774E9F46A7EE2F24F787896F41E167FEF4C2CFAFB59EF9ECE2EFA4FFFAB8CF41FF7E749F754CF355543D439F82F22A211F13F23C195FC7F26129C7D19F14F16AFFBF2ABE5BBF81F945DC9FBEFFEDE85BEEAE8E3F3EFE2F2DCB
-:80D90000AF4E7EACFCE9D91F9EDEFD5E77F5FD11131F3AFAAFBE8FBADB6EF9C8D86DAE2BCC4DF48F827AAFD8BBF428CE8FA4FEEDE63F4DFBF1F63FEFEF25F558B8CFA5F552D84FC1EB25FDFADC2FAE7E22F28A886F43D184FCC4D2FE99345F62F41343CFB1F21B3B9FD3F23F1D7FC5F44169DFD5F35911AFF7FFA9E3BF85FD959D8F85FDEB
-:80D980008BDBFF8FB7E5EFCFFFEDCDFFDAFAECECCFCAF2E1EB3F3AF24D65FFD4F46F4DDFB7F7E9EF7FEDF7E67AEF69FBEAF86FE8BEE2FCACB4CFEA7AA7F74F696F6EFECAEE5FE3F3DBBEBFEFFF6BFA2F2EFB4AD2FD1B7FF4F536AE6F2FFCFCDE6FEFFF26266F4CFEFEBC4DEA4F26FFF4BF00E01201238244C14814821484149A449341F043
-:80DA000011482C328110011388120121286988120429285412D014016D815024008224822482449648244824018244821B7B602A10C824C73200288B121A1482D612483848124AAA48E08244249288828BA46582124551A1A0921240D412282802A048A18A14C844A38402481800482D12414A084247124F5A084F22F5112485F2112C839B
-:80DA8000F4112CA7261D2CAB161D2CAB941B28AF2419F54A9643F24AB743F242B547822F14F924488F14FB244A1CFA264A5E216FA2E41DF2214ADE252DCADE24ACF491242D421F49F228821F49324C1F49724AF1812CAB941D2CAB961D28AB9451AF44F93448AF243934AF24F92448AB944F82B448F9244AFFB70B2E531F81C4421D244A6F
-:80DB0000D141F24A121D2C6A5141AF44B991F24AA2118F246B82AF34091CFB24482D917B42AD944D424EB16FA2F818816D4A8E218CE551D232EC49E2227491FC26421F89E422F8916C221FC934221E4C2F12E9C1F462911FC192B28CF64A974781AF247B14F842B2412BB46391B24B52CF8C05004800000000442100140000000018000093
-:80DB800000000000480000000018480000000010082ECA0022139211A3D32861222823671816A8C28C418978327881A28649D112B82198284684C224214D11278182836854204248A282394162484B218925887611189162393E11484C0429B844E388947243C444C0288346C3131B18C42841537619641185D486A228278137284725919A
-:80DC0000142302ADA17256041A7884914A531282C218668293A449F93482E280BA2421B38BA4823D7281282B2C94124658C11D824D284A622850243A28E29124F4A6D43413B16151183693384FA4F1142125D18622BA8C83E282311DA7288C41F1224257281CF8815230944F21FA28468E251622C31889FE46311742A89E2E896C28DA825A
-:80DC800092A28F44E325621A837631A88273B681B3217541644C8064678D825E224F22C9248C31786F2902243024109421811AE22451C1249E482D8348141392A28289A3434C628242114042452808806841803222114961412D8186E8240124195428488184344782292A281424842404AF3E0B14134101241249012C61891071482171B4
-:80DD0000422248A242A5A44121A2141D4A50A6D083140842604C488226022B92001E68C048811129280182881288822C0189229228241F49022B3449B2243136D11CD22174317462D414F41261272D8E1286B51CC8144F87F8118813D28678C1A414CC94841F4884F4294416F424C2AE5819F982721678B498678E114B2941E3B12248F465
-:80DD80008272124EA2522E5219745851285D524F84A2422933284CEA480492A6FCA496142993112869123C32184C61418F6C01D237815C3884982CFA618881CB492D441281AC388529342A567548A24896C122888F22D8146C234C012321C228321A24AA411E825842872819B42C412283624889042226FC516430414CD2418141416174BD
-:80DE00001C726212E13443E1248871524AD484C51226071CA8864D411D4442C4471425E84268832C849D5C4C2592818E22AE1485948256E62418784842A324141D18C09423A4A482168AC2A4228C89F8EE6F60434904258893242221162CB1819222C41B82C934A2004D322443A1942F81028C81226C812480CC61D82283641A188F3CD1BF
-:80DE800084C824AD41682591822C18088A75883454ECC188C0A896B4184422A281CFF80B9041A012C04829B4419241662CC15A4427822391148C9264E041C2218C127548825D4183E864824A4CC411A1825342182624824104281B411CA483430A2281A0342430214C6AA441C3D1860D42101144C8114C21C122001112460460488D11119D
-:80DF000042882064484912981220011C014D228584218442C412428A318C4608C041248004230800460B4CEB88C442EBF714765414D086C2188F1432621E411D6C2F81E622E896D182C1C643A11A8D848D442A7132A4298B4247844E864DA8FCB218F454228884CE14124B1267821337611AD258F916822E121CD84854381A18B118A828FB
-:80DF80002B818744433492294222E8A219DC48BF84E4C4F845D50040212162414D122818441C01241578481284323154482535921C43280440A82161142E42838C48C48244C02843E4C1E4228866148A7462412424981845B848098992444A0B89023F4A03124A311342400189C24840548212248860884084E838628489410C2C81121AE2
-:80E0000004810092848008428E18242629A24841622288002008294C2A044A22FB75AA00114954214E1428282511126988882928911425048921420114C810044548024843A861C88C820284C116455148128741200A1230C4C8438132861084282C18F25D2F40622220041022C1129052141081C212207142118821228264484312E448B6
-:80E0800001449018281F4562484942A421A268B0218498888C046C2444125822838406008140F8635D14424124CC024C24440444C054899426C121144B82A84CE242140480E181248124180800004E88282C04128A021012D24A0A00000000441002DF5E4272B1962C221880C21684148100A9028901148184848CC1488F41649500AC13B6
-:80E1000078C802461808800A105882C068818C042284812210481858A28C6214488084F14CEA400816071671197428114434141450144BA42718C724124C32114A82981425838885B8424822618192228A2528648589AF4810911286828242428242A2244200404282121892A81B8F00002410020082842D8C902820C886101404820018CF
-:80E1800045014100804801818444201204100418800818A084A02120718882BC1888F469FF6046182214002111C5E111A818144C59821B428B488524984212482B828614229C681148811A448494284C24010083314A13A4844E82684384744862442480822464A48C022881441F8108151881C4241D2284174158298114439441190E40BC
-:80E20000028C08450823D214C811A0846024808448014C6483A068822C221812020025046902835442814C22140821247F960B3E652F18F4252548799521FD221D123F51F5829E1D8285D9C9781EB52BF884884F18D982F2AE6913BA4CBDCCD9185B42442E72CF94D34214B848C5848BD28B4A884F8122E84D2AA26A8F5264852A7452EA4F
-:80E280008A7AC4C22827A630424848684AB168F242428FA208821AF251FB145724DD121E12274726732CE711713219A841AF193542AE511FA4E489D362544BAAD941F14828828CF2944E978C48C22D4485A845C4478DDE28121E642EC44A72247818F81C813D18D9DEA3FA2C644AF42214AF2EB4186A6C863488874687A4855EE28F42B19C
-:80E300004434E88F84FC8C824DBE24183E2421DD231227852E44CD4445581DC41F287956A28847748B14A4C7614A7814F4312E3F4224F614C14F1C781C6D23472D2FE8381289044ABAED31C83E54814F28DA82E1257AA2F2C8118A18926844482B424D5227842FA17882B4A2A6488423C8C8382F82F52BA5000089014B1684422004000043
-:80E380003011200111421146146144114684218421842184091800441C418481848984C9489841B849849944B88003429F370615F6561C8F83F22A69BF94F65C42AF84B451F113523F31F59F1B9FB4F4B1559F39B88A7A87718E382A1F1EF7F1D15F38D114FC8484437584F4AC7A4F83F11898C7218B881688EE8DE698FC1424284F4CFA5E
-:80E4000084822F69F5DCCCCF4DFCCAEACF6EFFDA58CFC1FDD4F2ABFAAFADF95ADAEF49FBAC96EBDD8F41FDD39C8F98F856168F8FED88F8B6449FB2427217F657563F71F33335BF11F2151B2F34F656342F21D557F5D85FBFA9F19B395729EF4C7447F71A18EFC2F2F971DFDBF98D51EF9AFCD49C4FCCF98584CFA6FE3F3FA7A467A19EC8B0
-:80E4800016F8D1C93E784FDAFEB4B42AF2BCF44D82AF79F3D8D9AF9DFEEAEBEFEEF7DA78CFE4FEEEE6AF26F77A3CAFA4F88E866F62B15EE544FCCACDCFEBFB52582BDF8E81C7C21F434541F615574F43F33637BFD1F23D24FFC7F239756D177F7DF19B1D9FBCF49131DF79B992F91E18F798DFB2F1E77D1BDF5F8AF1E2C18E814E518D4D7B
-:80E50000DFF2FE3D3BEFE1B19EF9848C4FC9FD88C98B6F8F49EAC1A2898AFE9C9AAFE9F3D8CA9F9DFAFEFE8FAFF6CE5EEFCEF468EEAB672D326F6C948AC723AF46B7C8F4468ABF85F1E6A4AF8EE88BFF2476DFB14CF337355F41F73133FFF3F31B277FD7F75E37BF51F71A173F54F1D851BFA9F19B19FFA9F9DF5DEFE5F11F1FFFB3F3FF51
-:80E58000FDDFCFFDED78CFDFFDD4D55FDCFCCDCDCFE6F67F3FE7E46F89ED89FDD4DCDEF98B399BBBBAABFB4F4BFB9C9ABF79F3DDDFBF95FEFFFFAFAFF2C6766F6FF76AE6AF2F9E366F69F14AC2EFAFF86A768FAFF54EC8CFE6F6F2F88F8EFCB839CFE2F27727B02401271210044523014002148234860882202824F8482410084421442117
-:80E6000020024130248008002A08244822482448000089820410086FCD08AA6441451211C4242119C212174189088B94122514C411D042B23444019882448C24D482614488C684A8282A2488042A21792AA149A724A0848C3262304200482B24102A1242884AB28D094D421F4152281FC1726CF1116CA7241D64AF24F11164AF14B911F6B0
-:80E680004A9151AF643925AF143924AF147BB5F84A954F82E414F9244A4E854FA264556FA2655D2E4A875DACE44DC24A1F49C2C21F49522C1FC9B24EF99124E7241F49F24A121F49F64A921F89F64A925B49AF6479B4F84A944F8BF44A944F8BD442F93448984FA2D4620C2D4A1F4156281D6C8F16D181F242121D2C4AE1C1F24A8528AF73
-:80E70000541BF54AB253A3844783A9FAB548A3F425482F14F9211A4AD8A1ED15E8A2641C2E52875C2E5BC6C4131FC8C2D21F48D62CD5C1B24CE948F24E121F49D22EB111D668F9116C2DB21B61AF6469818DB43E482F44E981D4427B1698B22E1A7FD2098444480000000000400800000000820000000000840000000044400428002008E4
-:80E78000400214F025A420120427C1141E282D212946A221141F28C1194283B11614E682952929129228428E4222812B414572182284A2C2838E9AE468502247823897258A244582A448984248A7618C3E5A8C5242684EA8C0684AF2DDE950248E23441C9242490417812845A81C227013144689D141B894B44DE149B4C501C352855B427A
-:80E8000043C2484AF28C324E982582F11844D02221E3C231112798A89C33228C6E132F922186918842C0841AFC4831498831AC148CF8A133C0246316F219641394481CD2122232265365183342D586915629918CEE14CD725E822ECC483A7822E1CA94148C54228D448B8319B698E68271C824A41427C2AF21E281CAC12F88B242638833A7
-:80E88000D68428E343948847812D28E3BC48784884EAA966C226A1692E8F00114502211E24211E486081881AD228A1415081441B438513413411D084544815A224418B252E92422D8290C4282F2281825141141E284E112026F162118A044823A4481832399344203848847FF109401428412171440121484211201122C1324004AD148207
-:80E900008D2548854422944156E52294282A092C0124448D931E241C982183028724281C218848D818C948209B382298A24C0827D4244B12111E25269A44C3C41A43F7C42193B318C8BA18CCD43475C15C948F15DAA3F9154819D64882C12933382A2E1C87412DA2988827242E4C8F4238342D211A322486E1C4331C1E42199BB1CB1C8F11
-:80E980002AA41219B5849542A82AD54A24648168418931A88F7A4FE24142F528141E282D45811F8431426F1268148B149E212391481113880225584A2791C01C1344897218944C29A2212F88E22224D48491261522321C5B294D8817C11E481C78C132B49F22A4215216B84191286887424222BA6448848AF239960040013054444C23E42B
-:80EA000081221808163456EB145D1A99FF81141E4166F484281C72286248A12936115F25A84824924782A22C2192142E83B0218582B222E181C248928819E86894884A6821D28C331820929481FF2D0D801412117C24F122445C962216826A821628129412AB841499182A9A182F84738893142625486812C048148128D028024A0212883B
-:80EA8000A82848902442162822B452289A444C4C08248B431E22EFD60DE0412432282C2484019C71245818182D844732421C0249A14264812654164AA21430842686314C2962166B4A4116A485457AC8B18891282D13481231856691CF18A2486B82188742C188008A644E828B18F7B70070183414281890124842182024941981412844C3
-:80EB00001A52144A0800501858CD421A826141122128A0121219428444581222CAA14810421808181283A12426180848BF4247016CF11428CD1166E212955427761B2447241C93285259D48354122F88D441D258DEC232AACB9487569F224C342515982487157694584E123E4A284921E46291892E88C4112F82FC221139C4D49B681B48DB
-:80EB8000A9C48C1E484C2BB284F1441889A24A4F8482AF281FF1070080124C34221289E181928816948AC0143648240112542218200444ACC524258A3224861484E222092A31112E129A04204298128CC29240C2488D94488848812318C848CF7A01181642B114440555A84243C29481502410C4118AD44821C3248880111301418A312843
-:80EC00002A014440028026425881842200813022444481124538880028E0119828FF48024C94281602813514921800602442986222412918240418498828541400168488A468708401000092001004DB2D8188842E828009120058009F380112211410A621491458248E292185445862A60225C8588A9482218CC124206821442E42A889F6
-:80EC800088F821124C18C4222C8A11884A81C2D4292282032150220020038922A61214F0CD8D008004424250422785B0442811A4248C715841415182404154122E4360841E8184404244C821844308822493019318318C101C514810286122501882882C0826A241D71B24131A281234311814429031130282880049C282281584C22442E7
-:80ED0000880028431288B2442228618932A0381842822F11220224200220C11E2280329491412024F1B4CB40085810586289012712488C84B41286120486584259C458120087211C31824A88B114188841CC2822821242A8242200201181A42880A24286884282022C88981483F8B1A91024110848A042000021842800000000002A04812A
-:80ED80008400000000801402005841868428018800298148080084F0BB6FA02444280028244392194D421F21A821C042128F22242102322D2170616842902E1726482448222B1424244486022112222328D4824C220142B2244028881108A0A42DC9F0F8CF508142488C23013260248170880449B248182444811902142308B8428C0900FE
-:80EE00002308868D028420E128021094248AA228184C08388288816012268144D822A2823FE84EE25771A8782BE14135412F34731A394A678227B68AE124F3641C48882F92B14C7133F352D96F8294138D141F4A72258138AD1F14F222189A5B229AF2482883DA86B22688BA9222F2BA113485A12AAFC62472BB5441896948B064F22AAADE
-:80EE8000A698283F8251812EA28CE115E184F9C3BB90214C81C22A4F41634155C42C1F55B618F94BE42D48C8CE84AF46F55C222F22FCCC8826E214E912322189F882881C62C54FC3B55858488A7C62B4B258849E848E22924AD8A2038EA8A63815984DA649E196798288D12AA899824CA11383998849A485CDE38AF2E6EE904423A5116161
-:80EF00008D4B43E226F734428D125F48463B98A57216F29428197481CC144F48E2612238144F15E425F2E34229149A6467828F8293C44D552F417A286341242A25E9A4BA23B113EA64B48482C1A89E622AA6821E1CA52AB11AE88898A42A22BCA2668AA3F3174124114512011904110020011200441A0484204104000044408401188001E2
-:80EF8000881008A901A1100AA1004110044130141004AFB14FF313634E23DD2F3FB2D6BBF83B3EFFD5F3213DBF11F54E472F9CED2EF6E292EF8CBDD2FFECE18D19AEA1AE91AFAAFEAA9A8FCAFB2559AF9BFC8E8D4F2A7337F346868FE5F43C3E2F2BFA89EA2728AFBABAA2E22A62852E2A1F8BFF998AAF2AE8A8FAB23A8FA9FB2B334D6A01
-:80F000002FA7BF2A48FA82B26FC5FCBABEAF8ABBA1FBBCB5CFE3A7998AFDB4EEBFA8041F37F73563DFD2F2212ABFB6F63F3F9FB6F72C3FBFD3F5E247AFFFFFE8222F6DFFCED8EFE9BDEAFE7C72EF6AFBAFBF3F3AFABBB9EFCBFB353DAFBAFB8F8F4F62FA3323A7238FA7F63CBE2F29FBCC8F2F69F98AAAAFABF3A2A2EEB88FA2F2F9B2B734
-:80F080002B3FB3F1EBABAF2BF3AAA23FA2FB3B7CABF7AF89FB8C944F68F9F6E4BEBEEFCAFAB4BDCFDBFBB8986F41F1F4DD4FEEFF6134F071714F42D6BBF2232AFFF6F67276FFD7F36B3DBF15D57EF1C2DDEE72AFACFFCEDC2BDDCF3EFFAEBB6F1EFEB89B2F22F327356F5AFBA4DD8FBAFDA687CF92FE36116764AFEDFCBABA6F6FEA3DE6BC
-:80F1000028E82BFBA22A2F2BB312F582B2ABBB8F29F8A3A9BEB2AB3B8F2BDB93E344B67A972A8E8A6F69F9C2C4EFABFBAAB8CF48FBACA48F82B612F974D44FEEFF32D4243F17F73435BF92E2A3F26BE95F63F37D7FCFF6F77B7D2F47F1F8F9AF2FF7DED8CFCCFD5ADAFF3FFFFFF3CF2FF7B5B7AFABFBB7B5BEB54FBFFFE8EB7F7AF26C6DB7
-:80F180002F13F73656AF6FFEBABA6F69FFD4D69E9EBEBE2FABF3B232ABFB2FABFAB3B91F3BFA3B33FEFA2FEFE72ADA6BF371787E788F81B198E929F9E2E4EFABFBAAA88F8BF3A8A8CFCAAA917ED1EEE8EFEF0F2901218424C01284C0482681048E4800240080021001704804101488084908002A012110840440A24924406489608844C000
-:80F2000024124482CFFF0E48802111C448AB144C82E148522A8A0643394286189A4498AE48214309A62A44282102ACA9284B42812E92282CA9218988B2282998189A128C92988A12082C29CA84B2A9220A1A94A8F0C7F9C0421F41522A1F41724EF21164A7141F41B24ED1C1B24AD981F24A9253B14A7924F84A914F82F4429347822D91E2
-:80F280004F83E454F9254A1CF8244A87514FA2F498214FA2E559F2264A9E24ACF491242F22F491248D821FC9B248F1912CAB841F48B24AF91124AB961D28AF2419F54A944782ABB447832B94478A2B944F8284F9244A3F170E4F82B411B62EB411722EA261A7141F41B242F111282F44F81128AF243A154EB217835CFA25482F347B31D8D8
-:80F3000058B833F442B15FA285F925C88F11DA827488D5A661586D1986D582F5812C2D581F49D62AF9916C8F14D1C1F24A911D24AB941F41F24A851D2CABB451ADB44782AF247934A884478B293924AB944F23B4D70E84820000800400000000000000800800210000000048800400000040080000220014F02AE3141942942281299228CC
-:80F380001911480C26E28225C8489B419931392EC24D1292488E1846143424A441248F243844A91E2622A2412988D212D121F3112488883280323118812148848D34251C7448224464844AF2F85A301686416C428D434711E9665113511A8561188B142F5138844A4242688222AE1C2284E088544272284CB2217114612943711294A43436
-:80F400006062C928F8142243522494558AA4A4D287694428E02AE411723491348F146A1270F146733174C49B28C5E284E272E185D21C21417924B948E2823C95D97948C1398F22EC8132A21EA28C432CF1A84286E242042E884CF434831F417826A2218DF2602636F1248A1F41FA84124C722402C9F214219AF638C26C186482226E824D09
-:80F48000112E1D2D524EA44E29622F610300412834844501C5032413C9128C2424430244128744824241444528612246F4231283041241443C084532118082285118112304608142D068518428484C5281002FBC07181280220618C44190828A846889004E148A1428089A8428A824402512988280AC289828248AE21229088AE214614867
-:80F5000081100A42964822880881206489422E426FA80E2C64128C639189B12561841B162E496E992AF42118A9C441CB496DBAA6C8188E761E469E2CC1432336868D222AC1471ACA346B822E18CCB1427213B4911241D458F3D22918899A392A7435A8A18CCB9848988CA616CB388E64C9A42849B6A8918CAF1D4221C42136C8288367513D
-:80F58000584E1599E612BC42E2210C1C85B93238488B84C2C8C4C84CAA4244842147162AB184A3828C6EA16273A12811128C921282F81D28607228324848108A6888494888FC6418124DC8E30512230119012881891294188817828C3C88464CEE4229D12C33142B92C38121B8222C723441D2280861184B281A887211A228174A53E99253
-:80F600008C43B984E18264819698888E188C29A9C21AC6348B24462422B8C82292A614A042852563816CC25881368871124822B121043244191482D226A286684382092485C41149B4145458814426AC21384D184C82064B24144D2883B6823244A0128D158A8101455A2448A22995A86FBE0F8014024B2489412204C914316886A4124BDC
-:80F68000418180A38342835828419A4468428A01E11A928126A1128AD1188108C21E8115981881C9A481203124167822082D2868CB426A8132A84125A814AF5C0F28441E22848094244D1248001842E48486E288171801301416192806842800221A8478288214143221A1633124238941C184421981044012848188812104F01B4F143070
-:80F70000242E1A184F84924CECC54C4E2842A561264AF84816463488D81D321A4AE288F224C84F1562C86249C21A8D264D11789665C283CA8C4D714B21F02194A97335C838AF4AA514DB832E424AAA6152124361834B128D148F46582683B9441AC8687D1B200265C128181A3222122961C118168811911832AD248C44A1424412812A9489
-:80F7800088001018A42458122E12C0821A12788134424450C160C81811854258388223A44218324A024A21F89886000010480416B422D422A12460C440C24C00424114C0848223985230548226C2938004401208A81200160828882294184830181A8221026024285FDD4682522854212121999448518888BC038C711241C28C21A1184258
-:80F800004911292114918800160416044684C3141AF62146246482850442130140328153014144444904478188F0DC15004943882114284288110C207812840A4C048218A852604660221E2210324200C028820014588B241922C4818C412814B1148848882288088088028CF884F5C04527142A84021C13D21252686081804161A48712B3
-:80F880005014502218604300251404328052228E2211A5011308848004282270388434412886C44C48488E429812422315F4CFD4A0288C034921044120A184AA91929088448890884A82584288A09241511282444B3C20C888860423182BC882834821388882008C8962818C88382810C82482288146F878C160841412111234181C81C2E7
-:80F900001148848820A8242246228862211002881A82280100182021C828C024141641081200830181280018871122C024D222129FF80A84255423A4442A146144114912891471441101180059448882145481004D4193041485C451481154120041125B2121944949514200C014644141420049019F9E0712004850484A03C048A024587B
-:80F98000482212E219C2214840C4818081584180038A8102818429821822416188890220081F82A8818428802882688922874888447F770345088CC528C9A141C5223248502154342849511491C124115C0A29032E14A08239E248142202261912420948212240C1412CD281C4814C01682C6182488B48786045D0C282F2EBD49071AE4909
-:80FA00001F81D188E185F4145B1546D1A17248BC11F871214E144F2581F114489C7C48F548821E115B85721F1228A9886E153AA2184DA82AB722B232E1827412E4A2F82112153921118D2E9CB811B218187129D849EE88BAADE498D4383C48FAA5222248A285B82496C2BF4B0845F41836ED213E66ED144AB258F44C28CF533412AC41DA48
-:80FA80008158D9AEAE1746C74A24AA56612D18188F49B4447146B513524415F4825223F11112C48AFA49281D1114A3C9261A4831812E4437181AA6411631588C2981E38258442F8CFD84342F848BA8A387498B229B767062124712437229F426393F63A5145F28FFE861A9ED3994C25F11D43AEA24F3258825B166EC7AD24498342EA4AC04
-:80FB00003284AD136F176457474C8E8143785AF28442A3F886242A7D86F1EA127B5B83778CE98275A8EA58E988F1231116939847C94D348D88C7415EC8474B4F45F3C4544E9847C12D98200410042100702201230221109241211781288C84C24828AC041D4A28154A54A14440044C024C52124C32424C32424C32422823042714102218E6
-:80FB800002290200425F3B013F73F27736FFA3F21743CB141F23D361712FF65112F7249F2DFB2B2B9FBE7D4FFF97EF7FF3F69E956F43F3DC9697561F5EDB88F48D95DF16F4C682BF92763AF25EC27F78FD6F6FFFB97822F2D6F66F77F795912F23F3B5B55F53F3BDD82F26F6B4B64F47F3B5E3BFB7F67D9F8BB31F3EFEFAC25F3459DDEF76
-:80FC0000E7F76E62EF64FD4E6C4F45FE9C98CFC1F95CACCF82F22B77146F67F617767F23F33733A3F4393ADFE3F56F56FFA4F54F927F66FB3B2BBF75F74E153F75F77644EF41F17F7CCF45F35E45DFF5F11A68DF55F56DD3EFE4F8AFEBAF23F14E46CFE3F57B6B9FF3F327174F65F762611FD3F334375F57F539392F43F2746E5FF4F6718F
-:80FC8000333F71F77A7ADFEFFBDCDF3F3AFBDBF39F74F95959EFE9F97E7C4F46FF7C5EEFE7FEBE8CEFC9F91C8CEFA3F36491F077677F63F73F3B7F71F12E225F27F71717FF62F25573FB669F7BFF2B699F3C7B4BF19BCBFF93F6DED73B227FCC7C61F7A9F935F1C1DD1F16F5A8EA7F12EAB77636F3EDDB2F26F69183E7F22F6DFF32781F5A
-:80FD000098F924361F5BBD21F2999B5F56F6DAFC8F23F3C3A15F52F613D19F79F9AAA18F99DE16F584874F46F6EEE4CF44F5CCEE6F67FE3EDC6F47FFFCC8CF8AFF3A5E146F47F63736FF23F33737AF26F6797AFFE7F76F76FFA6F76FB29F66FFFBEBDF2DFDCBD19FBFFDFFEDCF7DFDEBE96FDCFEF5C57F5BFFBBA95FDBFB21812F22FE2FA2
-:80FD8000A93FB77526F5B4D7EFCFFE91B3AFBAF9D4F2FFEEFEA1B12F2AFB95D1DFFAAA8BBEA8FF98F8BDB49F3DF9BEF43BD39FC9F849DBAF89FD8ADD8F3DFD9494EFEBFFE2F4CFCBFDFCECCFCBFDF4F4CFEBFF2C72CF460969012B12846981040048C048144854124C92414419040040044C0242802232481800C0110040618124826088BA
-:80FE00001486482149E488C4248289229828828F8806821A028041B84A41941C12229018128304811012D442014C01282212414418142A012C240110221162811051181226011880419822224A618325244344F39D7DD022F5112487221F417248F3112CA7241FC1F24A121FC9F26A921B29AF243995AF24B9A4F44A934F8AF44291478B31
-:80FE80002F14F9B4484E914FAAE414FA264A56F1265A96F123DA96F522DA9E242FA2FC91242EC21F49F22A821F49B26AF99164AB861F48F66A911D64AB961B61AB945B41AF14B9A4B44A7B34B8427B2498B24F8284F9A44A5F81052D521FC1F628431A6234174167341371427391746A3791AF643295AD224B4A2D134B49AF147194784A30
-:80FF00007197384A578B8B346F82F848816D1885F123D8812F92AD212FB2BC19E2A2BC11B62ACC28AF22B911F62A8219F62A9119F62A9619D66A8A968A4B4A2F247B24B8425A84297B26B842F9A41A7F820B8400000000004400120000400400188008000010082608480000004001000000000021F08A45504247216489632145622584DC
-:80FF8000C12FC18285820840E28681A2824D884C12C45C1FE2C8428120A48218833128495242285025190216C85244A6C99E321299A281181AA841B84AC25829D18482A66189B2610448A21649C6292E188D2143E51562282C7A8822E5E1B8CCC131113C34554AA21866280AA684C2131E2A99A1281B82988B498BE1172C80A9181D983DE0
+:800880003AA3330000008F8CFCC8C89F9FFFF9F91F13F331314F44F444441F17F771714AA4448F88F888888F8FFFF8F87AA7774AA4444AA4448F8FFFF8F88F8FFFF8F88F8FFFF8F80000000000000000000000000000000000008F8FFFF8F88F8DFDD8D800008001000000000000000000000000004001000000000000000000000000DF75
+:800900008D07480000000000000000000000140000000000000000000000000000000000F07472000000000000000000000000000000000000000000000000000000000000FFE40F48008001000000000000000040010000000014000000000000000000000000F0E6F40000000000000000000000000000000000000000000000000000D7
+:8009800000000000FFE40F2800001400004840012800484001280000002800480000108204140000484001002148000010F26B52000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024082
+:800A000001002100140000000028000080880200008828002800FF9C030080840100002001000000000000402101000014000000140000001400000000007028034818148002800414182810820416012810A21140012810A2414001002B11484001280048408188022148008828108204F05C65808401800200000010020000100240016A
+:800A80000021001400000000280000808802000088280000F04EFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000210000002100180000000000000000000000280000F0994D000020020000002400000000000000180000000000200200008228000080080000D0C10C00000A
+:800B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000008001800100000000000000000000000000F0A149000080020000002400000024000000000000000000000000200800000000000078
+:800B8000EF8A0C000000000000000000000000002400000000000000000020020000000000D015020000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000002200000000000088280000F09AEA00000000000000000000000000240000000000000000000000009C
+:800C000000000000F06646000000000000480000000000002002000025220200220000000000002008200200002F940C000000000000000000000000000000002100000000000000000000220000F0855400000000000048000000000000C022000010220200280000000000008008000000F0D59C0018000000002001009800000000405E
+:800C80000118001100000080010000000000000000820067E5000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00400100240000180024000020011200002002000000000000000000004002000000CFE10500000000005F
+:800D000080010000002001120000000000000000000000000000000000007DE10040010024000000400200000000000028000000000000000000000024000000F0CAFE000020820420824402002400000020040010210410020000008004000000000080024200F0823100200200184002200100400200000048A0240080040010020034F9
+:800D8000000000C20000280042004A22F8D8D9000000481800000040020000000000000042004002004003000000000000800400F03C270020022800C0224230120000240000800442204681042400000000200400008A040080022220046282EF214881040000200223011032220000006022008001420040010048004800002162200427
+:800E00000028280040410248CF2F0800A01248004041011301482880022200241120018002001C024001284212002800002602000000002480F8D4F5000014002224001248004082046022002004400100184800400200000048000000100280128104D06703420013022082427112814102480068800221281148002002000010012200EC
+:800E8000002220A42460240020820280024220F8813700001242001002B011440200210022000000144800122A04002C04200100100280020010020000C0431FB80912800228A024112842288082040000201202182382210622264202C022808202201481229442138802800882008800A22A94828F8D0C10011902001224002B61250159
+:800F00004812222006004222482C04808484840490411118581122484A018012232408244227244A0242C800481F87041838002222002346021420042A1422020042200412800620026014222A140162208222022094218028A4822A0842288084C281CF3D05481021212481A3248022041304004818122A0540022002180010228203000D
+:800F80002A01A0141002800800291802212182002C28F258BDA04211121842424828482C22324300000020020080A24226022248904100281CA424C0212800102232C100484A082304238402292A28F21AEF00222222000025022002210021480062484268482121482904290446818404C04160140020860842420042A084200430424804
+:80100000CF2C0C00001800005840021800622828000024004800222002002001001218428024220800202822026200F03D44001800806221420048C0427062220400425840022400220000000090214021020019042800200280082240017FAF0E001C05121A0400000028800252520010021880180218282AC1614081118104002D422863
+:801080002800828868002282228888422114F7C620041B3212621AA7567E622AA2622F22063521A444802681A232282344B24281A6216A662668222D4220A2262D61384A11F12121112E111E622B22F041A319AAA4A0888A784222B242282AA444486E218AE6CC021AE71341E11282244242219412F032632C8454226E420032A056484A45
+:80110000E42266242E429062422C26B423A7441B4113F261411681036A86226424428AE41C641860244E42AAA8A42CA4C42AAA82AAE818AC86AFA502902112181A23A421D02264244213A4242981A22123A6764AA544000023B242512212224AA122422820041B22362144A1452B12482B6222222AA48C4880F68242AA92228AE428A2242C
+:8011800024217FDE0F4001000018C012C0138001180000122001211022011221122041011440010024400100002440020000D07E01821F1283A2324AA2231E222B232B212AB252F33123567242B2522327A3137AA1223AA1151AA1272B46423E526E622B562E125A25A1115AB15184B111F111311996413E1223C5222B441386A446A0844B
+:801200004AE824B422E8247482E116A4C248C814DDDA80B47127A1525AA4534E422B472B457E122B552B433B272F25B11221A3477AA117284AB452A1554E224E429EB22B731EB22B542E127E525E216AA6261B671CB57137112E21687E722B552986B261C8A14AAEEE4A88BA62A48A6ABEA2BC6186BC22A6C46AFAF617A0551F11A4213A38
+:80128000A3246AE224F262322D622B732B241F36C3622F21B142C432583AA5117A273242E026F36242882E427E722B463E225AF6223120F471612AA3731E111119E621B37261262B441F1EA288EA8C2224E82CB622EC249EA3CA24B8A2A66AAAF24A2FA06F1B6317117A21A5175E522F22B14264262F25F163133B6427242B556E726AA5A0
+:80130000275AA7755A25A4444E224E421EA22F23F782222B4476E22794326AA6351F15C6311B711B331F1292615E722B372F2692221F1EE21AAAE6CAAE84AAF8E2622F2AB862BE22A8EEEAAACEEA6C1EAF160E1880011848184880044880044820818204000000008002200222A012601220822422280220088228821182288228823D2F67
+:801380000011008048022502244001250229820400000021100200230200144001002C01001482002400D012028004F02FC980B41162121B2166B11132621B212F36B111F262921B212F1439112B94322F1429F24291222F14AB424E912E421CFA22425E212F22E519E22265192D52DAC2521B292D531B29341B2946B1917642B381724267
+:8014000092612F1498212F3418F14282222F2428B2422892822AA4842E42CFCD0F2AA4412AB41122B6113262282B1619B26299214A9B214A29F24291222F1429F342A12B434E812AE514AAC25EA12E42DE212E42D6C143DE2148DAC2439AC6431B2946B19166141B282384E61498612DA119B642A8422B842AA4842A94822B424AE8226407
+:8014800012008248000000000028800400000090128008000000008004488001000080020000004001DF4B07820020042400004003A01242108304128004002200282C0200800200294102488200002426022848008048F28CBA20A42980012E1220C2422AD4222432428682542111284822132202226842001110832402271242290121A2
+:8015000060124E11264122A28426C18224C2003081282044A1245F7B4921A43C80012A01298224964222394482E6211281C241282C8203322A240828113023172422702221A4219042242E111A74228194228A64122A08239C2221E0188442021C88F2D1670000200421400224402208114210824401800448000020020024000040012013
+:80158000084002002002004880F4F3730020020000424821134102210082000000100121100100003C0814004800000034000000800842F09A76200220E2240228002130C2200C8002308128800242A0428022482282020028181642021180223C8100004A022800424228F0DCFD200228282C062200219093308221000011000042E0224F
+:80160000048048222202708182321118101201803481100120040080042A046FA80300000000484821488004808208822820021001801201000000400242002888001002282002802804C0DB002212280028122C04C0420012488004224002184280A48486014081A821C01218822601A02100225021004888820024422420724C03008022
+:801680000480041448181420022280010046022C0110820800268104800411C84200501200E2224800428008884E22A0842F8C0500400100210024002100880020080082000012000000000000800400004002000082007FEF022002110022230129C412172400182A24880422884240824C8284C481180048001A94121C98A142200248BA
+:80170000226014004888290882304282A0486E2F008081022004460100240000120000000000002022A81200000080012501A028214800420080A84260129F250B1222102121B21222922222002131882901282246118232812C44C123C0224821582800181419811201198922C46110011C84084222004248422229F4EEAE10010011137C
+:8017800044210446024211422096229081008004800888110020A82920042B41002011024840011082084A2882188108F0566200140024000020B8120212002200182004222014218585021118421001001C02282440210421482024220442006234DF840D1100281142204422041314211422C48142214A120100B88048A12848800412C4
+:801800000030114248305125118108881188428842884288248880F84CB8A0343220A121321F25A212683248000000282A04258122B31244B112225222004A28A224268122828282022880862224A6244A0823282204A2222A2C263822AF15040038140040028880022908290288002A0821A82901802228220220280400110082000000E8
+:801880002100800200004817B80000000000242810422208210014001304581400E0281481044814000021C84200000020040042000024CF4A04228212226215021120880848886814424A2988C2421CC42288A2121CC6410028000022002012011448192ACA818004200800286014886F5D0400682008002420420128001111112128100D
+:801900004281D5228408132208C0D1214229849141208435812400800428000000002114CF480A1F12242801171E15A2142D42422CADA41B1235C1428AD821A6248E82822C9421421F1CB6C2D823E421D912B2413222212A2502181344C1113F1243011F11F8211333A442114846812C988280268A0288C04142FFAF44A111968162111893
+:801980002F11342211232228DA32042D112B242333A11381DA11E11408181F23A4863714172426A3E44E82C6A1244AB6518EB663A42112286AA46C1AC4631C62146EA11D22461182A44E62A042EAA424A22E21229F6F03282AA2121B221AA2261F11A2362CB26212A22446A28C244225A16617366A7222B2216622288E212A26A2C11F1888
+:801A0000A16A281CA499238A81027041922118CA0A33A4E8A0C8114EC24288884AAC84882AB442EC24F882C2EDDE144218C011481C8184818481C411482CA1482C8184818401180000008840022E926022E0220122A092603220226812822088228822C821822882286FA2032A220319A7221D112AF211113A23E829F912322B11A0911E0D
+:801A80002137111F18BB31FB31323F1DED14F43171EAFE21811F18E416E637FFE341281F3C5C22272B1E42171235723222712113F23181121B461B4415D11124E224744292624A8604424AA64428482CF253DA142E21CA84C2612E233D422F22F223432B229AED2BD933F622231ED22F21EF31F231211F18BDB1DB31F4E3C12F14F43171F3
+:801B00008E921F3AC8E32F37F742432F1EA4A21F3C5C322F28E128F4414135F3534315D313A444171D17384E433D411F12F481411F1CE412622C29A24C48CA84E21CA444238824FC8885A0671AA5121B317AF671132B6717342B66FAA9EC1F24B243B6D2B1C2F841712F14F4D1811F1EFF63213F18F853111F12E63EEF1EF841833F16F672
+:801B80003173EE43CE223F1ECC612BAF2BA51F32B641B633B613E22292221F1FBE91B662B662B681CAE11BA21F2CFE42822B886AAECA2AAA8A6AAECE2BA2AAEC22BEA14FF171719AA5331F15F371711F25F573711F35B562A6CC2F2FFF53732F34E624FC72D23F34F762611F1DFCE1F13F17F7A3811F15F321618E83EEC11F24F473711D64
+:801C0000431F3EE42AFAE3C12AB2F2B7F2F621631F16B633F723323F16F261611F1FF3A1326E633F12B6A1EE1AFEE1E18EA32F2CB8A2A8EEAAAEEEAAAAEEEAAEAEAAEE2EFE89AE00004002240082000010011348022800114231423110022004005012400114004001000000000000CE42400122400186210112211A5212122928511212A2
+:801C800030114212148210219451C0822820D1221881244102141B412C180140114102210000002004FF740E1CB41142B11162141B21271419B24291212B9419F2429313F84293A22F342BF24291222D91AAE414E922C4A12E4216E122E419E2226D192CA5292CBD91C2521B292CB19122B491F242921B28271419F6428219F6428119B4B9
+:801D00004228B242A8422B842229A842882E428F6A0A2A91415819A212482B1219B4229141298986AB68981B482DB1482DB1AAD412B182E414CB121CCAC21EA11D424AF2218256E13268192EC213E922B481E422349162112F12A84826B18134228AC4211B68218A94228A94228AB4423282288E422FC90E20880400000000800200000011
+:801D800000000028000000008004000024001480022800000014F08AD5200A1200282902000042000000130300221C984100822400222119022B288021858234414240021C04000048002860222BCF00822A08141414282234964181410230532CA6212416A1251A8414021C0118281965241842208401148819082C02828A34A129486220
+:801E0000242C048A04A814421C08EF324201C218001C32228042032044824222C52232267311021A249783C2190198283B1413D422210446A238E011846512A0424880C4212B8630422420842452214A4221B2C90C22A08240011428001C19810100144820013A04001100000028902100008882421121822C28480124482008820088F0D2
+:801E8000E8220000281420924124124612613400001A04120020021100000080082A08804281C48200008288102288082008A024F034AE200232124868112AC141004A018AA1844A93411488424882488842486810C12214224821484A211242011429828284480121404202482220C44100AF910E228001116819A2143C840118158221DB
+:801F00008841A114881848884282408104142C0222482328A41400115021A22100C082002488002288481448F02F9500808223049021004239242428A42442142004002242422200100100A08228212811422022244801821042828804004222F0C8F6A0142218680013023021200388800240014022818B028008001400228210828C02A3
+:801F80002848004031424820081081022C0A48FF6701008024042001290420A8420023880422602480A584A041888228141C3242002422C22024012448A20082200462000046022CF2EDDD0000000028001210021061140000000000000042A02818001100008200880000240014200822D0D30912281222426012222419260188C85021E9
+:802000001B480022208481AAC2A04120881241820438249083884A82014A3842A8881582842404220020888642F24545800400002001001A120220024814000048000000A042A08280880200200200008800822304200282A042EF9D0F48721081C1110050121220582200922192211A2201E0280218808991916898B0410A4A83820C98BB
+:802080002882281CA4821002828E2222282280226232F0546F8002282280024A82A4288002282002702201A0824022240A2200622004400200422011018821484800200482C0C28084B8540740218184044248008248482004424220922229046219924214001906222848006022284021822286220440032088280480C42123F49C2800F1
+:8021000000120012003042002002208202C8800800208404000048480011602242240080820800222022068288281F330800209121322822281B8228A2258224A8212A9C8324005E212AA9851CC461222822C22848628A8662188230218223C141213042468106212018024888802484BA83051800284290410042130800200818E0280398
+:802180008246D112A2182C41A194882246011C88818812218138211C0400110080B44218828814010000571C20228112014200240000102224011220094002A0148001181118148084018024828982E8280288800842483081800420F44F8120041240110120042120880410B2212488081410020000000028C02100800225D1226C28805A
+:80220000084A088002A8808428CA81F0A829808182042242322022A44242422842C228241100906280014A0A288820410114208204B0820480042048A268200448601A0021F0436520A2511AA125A0412A05F042426A88082D42A0842B48211CCAB2281BC8682F21D2222A9441A0381CACA422A213671A623B6A22271A2212E6E222BE62C8
+:80228000AC62398C2A88384290A28AE21CEA12A4442BAA469322AFF6094A47A1222E11261121056E4213B88204272CA086C0224ED38632A28ADC12612C6AF4814125A3245A848422228488841A0190C14AE4249C418240226422482420A6466A044AA28848AEE162AF240A122A02111B746E3119A266282EA11B216A862C9442AAA7971B7A
+:80230000223B13B032A1272E911C28A6E33E11AAA283EAF1115119A7758AB241E418A6111A82F281223F1AF3123125E128F2C381A2CAE424F8C2418AF882E282882AA4882842A0C8F501004021080040220840022048124122089210020088000040010000344002248200240000402108002F450B5AA2261219A62717161F16A2462A2217
+:80238000B4E24A12028AE821B162AE7726A1B34A64111F1BAAAA3F1A6A2C3F16A691AAAA5417131AA1CADAADE88AF8A1813AD311A6CC4AB433B382A2CC1712371AAA8EA8842F247822B262A4C66E41A0486A8444F1C53B20A5531AB121B2F1D611A1374AA42217342BE68E822BEE2F24B4C2EA2DB972F3D3B23B992F23B3D2FF53E11F137D
+:80240000F6E1F31F36F441F33F17A751EAF641711F17E613A3FF7AF5E1E1CEA11F1FAF331F1AFAA1813F1BF8B3B1AEA22BAE3F16BA62ACEEAA6A242B2CEEC22BA82AA4CE4A2CB862A8EE4AA835A0642A26F311313E3115F13131E02626B2E2EA26F4C2A246A2CC4E422F26EE22E23AE822AAEE2F14F4F1B11F1EFB83811F34F86361A0BBFC
+:802480001F11F131417E61AAA88C1BC81B881F1A0E1F18FAC1E3FEF23B112F2CFAE2E217323F1EA2EECEE229F8428227222BCE6AACA819A2C82BCC482AF27758A0553A21B331B371F751511F17A3446E62CEC22BE6242BEC25B2E2EC29BBF2FB13333F19F932322BFD1F15FDB1F11F3EFEA3C33F34F473711AA37F1F1DFF31617AA6FFFAC9
+:80250000FF6161CE811F1BAF331F1AFA81A12F1BFE3231EEA22BEE3F1AFAE3E1EAAEEC4EC22F2EF862C22928B2C18CAE886AAAEE6EA1FF4F0318800118C011480014004880044820A824132824A82411004220044200000000184888482248A048208802A0482800826F4102009021421180243481232408102228B4811402210015820837
+:8025800000804881A428C88AC28128B0814282E232084682E214082C080021800A208208EF8F032AB41142B11162141B212394212F24B191B24299212F2419B14229FA429313F242B3A22D91AAC4912E421CF8224216E12264192EC29E212CAC292CB4D1C2431B2925B2917242B2917242B3817242B381F2428219F24282112F1428B2426C
+:8026000028F24281A22B842AA4842E427F6A092AA441481B2162122316B16231912316A1B41B282B94924EB113F142B1B22D112B491CAA521C89EC15CA521E212CED11C2D39E212CA52D3CB491C6D11B29421B6927148A62141B282394214A8AD212A8424AA84A2B84A22334224A6822AF4A012008000000000028180000000000000000FC
+:8026800000000048000000000028004800004001AFCD0A20020038241C8154215AE81823084223C291208804422A2182080086A12400284248C02182210098A08410220200240048200240F2F7DB20611820098044220200482038812344826422260182108214022810A141107223E2340880A8482E82142C02804881D4214481022008D1
+:80270000821414A0E21412130C00184662212815A2142E8188A028E01C41A248241D2248823229A848214081061180744222240229AC48222B1822C224822222002C028004244001FF540480029280021142802821044632A121002A04800300008A021458282119C283118800821410021021944125010088804A01B0A509A021222002DE
+:802780002240A2412001100210810828C021209441008024842144A2212428002901260200228200200848888008005F390E4A02185021D0212482A28214C224821C8C88A28121581420641C28282B244A8392212890822A01230E8800211908D0121C312270C2612C488A04228848428A84F4A4F42022A32180024200290DD8001488409F
+:80280000031001281442222984031422208882622C00101292812110122108212400422A28082004EF3D06480040031D2222282814402238C2202289A8412260148A2492412248282A24C41248162231222882800122001B482C82028E414AA8844A0800C8428848DFAD0118002811002800C2285280C51242420040220192002C083240A5
+:80288000C11280210C12260218002022641286218C04210080C82240F23777000048420042245200880068801121244202A021808128880414201241021448428800002842000000A2002442229FAB0F001001001200121A1402000012002A2824148202280018428A2408128082810228242C04002100A048884082A2480067EA2001606F
+:80290000121C04A02410A2816AA141A0412A95424A31118022AA14468282828132824A2281A41CA2111A08112AA1249228242C8422225612C80048204A22A86842249F2C0700000020011A24042908000080040080080080010021122C042A01210000201481084290828200280026F18926800211800142281021140124924A082492A000
+:802980001430813021E024421221A281806824428008003A0434482008800C284282000010F2986D00118002602311221023921280C4122C01002248482221240020082C248502428004222400280029840C0088422004800A5F250A4A02C011281C8102001800182021042280B212222104A043001200222D11A81128342248200620A27E
+:802A000024222119042480024A62284A022E412F384D01280012200129810688C800A88820841202002C8142A18492820000188212200100828215024240220C209CC20000704C061A841221324119C64222258231412001487041A24227214229248812A24222162281862404422C02298242823212304100821082988311C28822242A9B
+:802A800028084622F89E4500802201123100802284C881D022A2838A81A8121228C8348088C821860118111C018A0280820418218A868292432C2A04828012210262884072AA04004001002012011200200400008001142400122022028025810180820450221C0400002800000022E055011182280000A0412823A2384218002242421266
+:802B000088482C028004582023C41280011220A1181914022384388214404232414A082182292824C68188EF820F4081041382044A014800802A1902822C02201962162C2181180180226612429062800412222800200880028046B2214403822924F6C3F114621F18621213837111E1245312281B22327E82881622B122ADC12D128E521B
+:802B80002B235AA1582225E22282B4533761BE51A21A8381AD11EE726A2382E124A2645AA7428E428ADC319A824A2AACC8422220AA2826014886E126322DE011221A8132314A32122223C2121F14A638181989E12DE212A28E294AB22238729E924A12A212242B1111582A94212B242C8218825B21A23623F24222464132E24E4125C2C29D
+:802C000035E21888EE28A4241D42282BCC826E21887B3C8004281CE11482B521E421A6152F141442A14D82CEC2F0C21248724A8186BA41F621411D412F2822E21894821AAA846E4236B26134121B4912282B11182411A82B22F081222A14621439642C6ACAC22B862BCC222BA62CBC82F42A4B0014408104400214001220490124822400EE
+:802C8000821001211001000021111811100100400124400200100100007F444C8194212AB221267A61F363212AA2445E132B55EAACCC1F14C4923F19B8E2A8932B574AA6AC6AA14426F24243CE425E324AE818A8884AC4622D222F24F1B1E18AA82315F18183317E321F15A5EC2BCCEEE11F16E22EAECC4823A4AE8AA8C4211B662BEA2A41
+:802D0000A8CE4AF4DD7D144AB461B621B231B631FB11232F2531222B241F25B113A1CEEAFF41D12CFB83832F2EBC52E72FBF72B7D2BB42AEEC6E132F36B422B972A3261F1CAD886AC4432F2632421F3FFF53111F15A4221F1BBF11F751735AA5C82BCE1F2CB661B2E2BE62C6422B64EAA8CA4AFE23E21F26BEA2BE62EA14A4CCDF3A4CB162
+:802D800041D61146F121116E511F36F163316E622B541F15B151A7E4CA7E81E129F922A23F1CACD72B574E622BEF2BDF4AF421723F34F442C25E521F15E119A8814A4513E226F491F11F1AAA732AE219487142F25353CEE223A822112F28F882E2299482E024E824BC62AAEE2BC829AC88AEE26E1A141B661B62111B151B771F35F75333E0
+:802E00002B662F24F343223B66EAAEFD1F11E927FDE2A23F3EFEC2E22F2BBB72B7F2AFE6EAEE36F6626327212F27A2271F1DAD8B6AE526F662622F24F4D2F22B9F3AF72121FEB13E713F36F65252CEC22BCC3F2CB663B6C2BCC2DE21B4A2A8AAEEE26EE22F26EE2EBEA2AEE6EEE18EC22B41A01240012E11E0128144A2411448A0410028CA
+:802E80008022A1241228A024800242884218422220020029012A81A48240A248240048248E4128A02420045F6D0E1C0422004021512228228218A094122DA18A3442304280C8424641021B521280E22224453291204183523219C21240B2810428421188224E82602482208208B71980B41142B11162141B21272419F2421119F242931B31
+:802F0000212F3439912B94222F3429FA4293222D911B4A1CF921421CF8214216F1234296F1224296C1C29AC2C21B2D2D421B292CB99122B49136421B28271419F2428319F24282112F2428B24228B2422892822A84E822F4E58780B41186B411021A3642284A81B242B911A2B41B294A29F24291B22714A21CB1A384F921521CF921C21A00
+:802F8000B82164192E4216C1C39E212CBCD142B211C6D21B29881B6923A428271419F2428119A2A419B24228A284222B842229B82284E822E48F0D208804000000008002000000008004000000000080040000000021280000000014E06B0400108114011A22E1312821011220012142142A8921024262200222C022202222228321284852
+:8030000042014211C08288802C024282002028F4B963A014A68101322B8148002820AA41002C0618212C324122124A18032A418289B521218521C44146022816C142184A811422B8220C460221904180A4828691411CA2823E6820651E005E22118003199212226200282112C023CE122832123924A821282B184AB221B1411122C66122F2
+:803080001A22E1198494122B412442112B48822B82244A288284A4482AC8821344A1C29F13040018112029041892208921011A440223041C22018A042A040018202201C042200288408104822260240040010011800A8E8800002822112503292188A94820010050128242002014022200C22C04002440011428241002230424824240022D
+:8031000088800880F4469E002222142412321848212962218286028AA3D298A04122424A2214314111B041888222A2812CA4848A81A18226823A1286A1244E813B8228E2420024288A8284024242F01DE20020C22124302212482988A385E02801824A8148218C86043041218042014A82062C04181041022333812133DC32A824824221BA
+:8031800042242823880C824200E78C0028002813D1210129418208290880836A212001A04248904111A0482882248A018AC482122A88B28102800628A0248008002220028024F4B4C580250248502180417112023812A025304221268102821C8112229442C822424041A2424A212422042880021180262422044A08682024442284F26976
+:803200001F1001A05242804403111C02A08428220080044248482818923290321B521C0288283012528821188220C88282200A0000221042826824AF810322804201000042000020081A02A08180028A0414000042003188001480082024021400002120088282006F7105262102114234400233912118128A24612AA02114481282182473
+:803280002A28B413A412B05212A124242A7C2281A4211819089288806422E8148248C08280A228304220C4422E918005221A02203411144821280042602480228288E414A24242004828A0250020C58200302220021C280848008004488084288828F272BB8083A221C012281824242C6224244225420240426222402122149222212221D4
+:80330000282511E222E81812328221803162008A04001308860248290888482142A2485FB50900001904214A230480A281D88005408121212121021118E0120118005213A44122114200120040012123048A02000000F09DEE002081024001001814A01448000000280011001A041A280221192288A8411001114800C042202428A48422EC
+:80338000822924040070D6030020011148122004420088222D41A0522B41141A34210048140000480000112400400142118280028820140200230AF0525E80011420D42184633446224192A12124822C244102260200207412120123848214238AD8220812299142A0422014C14100821502004800422240F14F83C06100421821102221A5
+:8034000088021239A8212301271218A041A04148406122828280A1121C01182C0411160229210100113413344228280080084820F2988C00186800000000188002224A223141804201C0118081044001208124232222C221200222228882806224000028A8C082887F1C02200200624A3222A0A423088E4120045012004828111D2280045E
+:80348000A8B08124840248400140011C0428A0841062120021233C2288200480F494FB0080A41280010020220128002212002830428085E222084824225214601222342A0448A042113302A042008220E2248804281002C778B02104A03442230123C212E23AE82132122B448AB122312123A34236A26116218432433642A2C84A22D21224
+:8035000011A18923F89241DE621B12282D121976529141198C52113C54124A7482622C8A6E22C8290C2A0486A3846F5B0F38121A22031D431F269751808F7441E114BC81A8462C0218159112621943D121C44119E61132421994E11B254229B241E2244AC141121122192425044A042C84B8412C6226CA6A24424EC24A9822A0424F9F0DC8
+:80358000122AB221011E536A32125E222B4425D222B222E928E121D122A8452F2457312F25A1243921B63127467242B123E123B28261292E422B73223ED3112B922F217223E3153642282A83F223418AB281B881FA232390C2212934A28222286A8C0A2F9203111811001800120000200112100100000011000080092A091400B02201239B
+:8036000002146032820024C022000080F23668501117142AB211C6413F32322237322B722F2C3CA23F39F9D3D2173429FB22222B662F23F352412F21B172A7666AE626F66362CE132F21E323B1D2E529FD33224E22DE624E422F31C8223F27E322F232521AE521F262423F1EEE1EAAA61BE64E436AFC4141288AF862E2EEE2EAAECC4AA623
+:8036800066AAAACC47F8145AF441411F12B311E635F53333373135F372722F2CFC82823F39F9F3B23F3CF492B22F22F372722F33F372732F25F5327229A4462F27F763622F24FD13132F23B9D2ED2DFF73322F34E225EF24FC32932F2AF633723F22F232323F31F532723F34F4E3E11F1EFC61E16ABE43B463F44141C82CF8E2E22BEE2B15
+:80370000EE4A24B4A2AAAAEEE2FF85031AF211711F1212E136F6333337373D132F26F7F2F22F2BF113133F3DFFC3932F28DD22F372723F27F753532F25B552B762E612C6133F36F642C33F31F172722F2FF792D33F33F252632F29F272623F39F873623F32F622233F33F142623F31B252F661632F16F6616119FCA1631BAC1F1444A28AB7
+:803780002BE26AA644CAAC642BEEEAACEEDF760B1F15A6113AB351E237F733333F35F413132F27F7E2E22F2EFCD3D33F3DFAD3932F2BF922322F27F772732F37F752522B673F16E632C7533F36F652423F31F1E2622F2EFEC2C33F37F652622F2BFBF2F23F3BFBF3723F23F323223F33F363611F17F771311F36F663411F16C6C23F2ABE69
+:80380000C3FE41412F24E42AFAE2E22B6E29A44442EAAACEEAFEBDB70000808164124822004814004810011200002811002800220040011480018024021440810482288200282024F82D2CC0411922122182542220249812282D928A6424220029219322C0112E4214260258922722168124D82234C1262201197242024613418162240051
+:80388000822724C08220248AAA424214571280B411021B21421B212394212B1419B24299212B94112B9413F2429113F2429113D212A9421CE922C4811F2264111F2264192E4296C1429AC2C21B292CBC9142B39122B49132421B282394212F3698212F1418F14282222F2428F242822229A842882E423F1F05481B61181B21421B212384B2
+:80390000724291212B941B282BB4112F1428D21228D2122BF2429129D412E922C5812E82122E42922E8296C1438AE222BC81C2C21B69241B29421B28230621282726824A12F14282222D82F042A222882B4A29E822F4DCD4008004000000008002000000100218000000000000480000000000280000000000AF8B032002224216214503A7
+:8039800086A221000030510048008A0220041810A28124201202142028222A04424001820000422088222424F6FB42145811005022190215822248611C824819268898C11B8313242681786291221904115A188102C88842404181CC114081388229248244C1422400C6C242822814F08DA380E4140222481721194211D3228801AA0448C2
+:803A0000221384B881A4841D422832123D22C213245121B081D1210268884213048681641840012C8884A2C214482400822C682A2A84E424F256BC80010024A01400282A18412108198409303180842828240200D800C0820040012AA82142E0240814004002806424480000AF5A030080220200A0212008B042010042824200002210019A
+:803A800000482830110000182800800482421124602410020020F2248D144A2102111819018091816800230C8A81E419841131B1D28286A12800781981A986AA01A0822AA88234C0813C0C272A2C0814218058122CA48288202CAC8428B0B208001081C21100122E812888002182421448A034000022A02119210138001B1288101142915C
+:803B000021218A1282042928348125714222160248800824AF8F0D1A8402281800001242002B484A21015A8831811CA81C8813A882001C0488AA848C028222A8001AA84824C08240010000822C08884A282482F283A6A0240048002002298124842884828288222E94112868808C311188208444014001003A84840824244602268302802A
+:803B80000880C422402288F8EEEC14001A82A624182200A01820C18268200400001391A280011A2A0811142C2C22A22128422480818812212208822A08280082002C02E0F20D00800124004842100180C1122024012A0880042002804102005888212880024880044882304140020020082A045F56432106281A22C412200229A1494292CD
+:803C00002C8881A1844AA24BB0A18102E288C01132824A9141808892711A22022C028A8144C242222B48152298C1A02800482C0200887FD90882800122200242481001484222210048004E312004280000214221C0822022210688281448A028000021800888224A0AEF350B90116014102102280000122002481308001302134281A2216F
+:803C80001442D800228004A21A28442102248E22A0243041004221200C48AA04AFD507122022011200800828A8002711C023A08414146018825021146012209C82252105293811008A34911C962100822188118A04AA14120221008FFA078A0100001158A04200008014210C8028023200008282262102A042001C12212224044A0830420C
+:803D000080C44188282304282A0428488A041480248804242890114A98118081024218E024018888002A1422250300141E621110E1212C22019A828802C811808A480288801C0221243FE90928802284C321180020860800222200220000221A4821220413042888181200132408400182000022682128422302001CF2D8EF140018304138
+:803D800000801621C841C82182001502864211813211181188133812112928C8811121882160211440011420822844210800400288005FC70120810424426800211C0119011820082A01184800D829B412944224405221142124208104423A08482024C422800221882400808288F8C61B202428110100005A0200200480091200200200D3
+:803E0000C0610000200800E81C0280222832228008002880088008884F6F0982224832A041142800242A052880C44128134CA184223981B44121A284001A24A12416212D92D219881432821442824248822122A024200400A2482129F4D4F2141A6519E014944114112A21F482114AF9219118181813A1448E5319A1991F14C1C113E81100
+:803E800031611F1126E511A48286E11EA4A816A2C2DA9182171116B162B911EA11B691E2149421CEC28ABC82021113F822422ABA8254228EA2298CE81282E81C08118A22A231423B356A324228621D421A223812246A021BA78AA844821982B28184043D633B3C1E51194222B48238D12F32A44523582186A246C24E1113E814A822226E0C
+:803F00004180AC668A68242C22A4442223A6842726FEA38082A131111A82641128221B618AA2441BA4A086481F1208271617222928E212A1228EA3E60226F241224E521B911F2284D23283E22881A8BA1F11768291812AACA2AE42F042222CB862681C1C2894426A883822288A24A8482F6E0142222022581248211A142211A241211A1406
+:803F800022019A842209924282421901190819089800A012C081A092C0810040A24814482882248A04822880F27FC320A836181D611F36F6C342213E322F21F382822BCD2F2CFC72422F24B4927A13F1B2A33F1AFAF1E32B446E311B4415F191811F38BEE2F7227329E824B472E723BB72A7E44AE42FBFF2FF21B33F28F883422B111F1834
+:80400000B9812AA88827282F22F42242C81BC8CAEC24B482A8222B842B8829A2CCCAAC447FC646F141411A051F11A5E61F17EF25F512122B751F1EF8E1E13F3CFCC3E14AA4CC3F17F2B2A32F1AFEA1A32B4CEEA33F1656113F39FA83E16EE23F36F643623F36F673723F3BFB72716AEE2DE42ABDF2F7A1E32F2AFAB3D21B111F1CF841A135
+:804080001F1CEC1CFC4242212BA229B881F861E2272429B822FA42C227222B222BC4CAEC24FC8EAB147AA6512AF231111F17B751F541632B224AF641B1DED21F1EBF92AB54DED21F34F1A1F33F3AFF33F32F21BC52F963411F11E11EFD81633F32FA52732F15E435F472716EE32F1FA7A86E62BEF22F2DFD93D33F2BFAB3332F11FBF131B3
+:804100001F19BA81F8E12227282B4C2B628ABEC1EC3CFCE2E22F2EEC24B4C2E82CBA82BA22AA8A6EA2FF2844A15D1A011F15F131733F17A7441E122F25F763B1FEB21F1EFF92922B54DED21F34F1A1F33F38FDF3F32F2DB4D2F9E3C11F39F9E1F33F18E626F653733F25F4D3C33F29FD83C32F2FA7ABFE628EC22F2DF593933F3BF2D392A8
+:804180003BB31F1FFBD1C11F1CEC3EFCC2422B4C2BAA2B881BCC1F1EEC26BE62BAC2FCC2C22F26BE22AAE6AAEA26FA97FA0080012E13C01340023440834412818204114211102114221402184A021002001C082901226022822400828044022880222804BF6C0D14008081B62201228246B18104480014221C081C280A24A8C02122468122
+:8042000068182A2188A428481122114A38811081082210120110022C022148C041FF2C01581B21141B21421B21271419B24291212B9419B24219B14229F34291A22F1429DA12A94A1CE92AE414F8214216F1214296F121C296C1C29AC2C21B293CB49142B291E216B891B242B881F2428119F2428219F24281112F14A8422F242AB242285E
+:8042800092822A84EA22F4E9E120A26126B11122B49152121912B211B26239912F24BB91C212A24623EB34218BBBA2D412E12A41E122E811A852122B82922DC31A82AC292BC21B492D121B214AB8119292282998212D82199222112F24A84224222522022B4229E822F4EFBD0082480000000000280000004410021800000000000000000A
+:80430000000000800200000000B07E0B5424005222111361238C282481054428003061442884C2800418822826A842224C988123A32120B821A1280088800C0080016880022A812AF27A3D24129A0228471AA02822808113889819005D8219E1C823E811A2851986328100504121138441828484440593A2482C81816B24871B2426A84823
+:8043800024C0A2002824444081F48DEF3015CA1122E2418C32A11962211628C318EA911844221D841621C92115A668147A388182805141D0819621288E44172C3A745401141BA4221232423E894883A28610E2210A28404202224AF278131082026012001222824200110024D048A24838128B2400480082230258100280028E281892218B
+:80440000822C082C080000808422422483089F25010080C21219468102200260880088800838A2004420642280288828850880021024A882008222821486880820812A0100824FF10F211681C2125B427012C4482E124A38813BA4271930149CA414888F41A2485324A428AE418E422C5641424B4B4E2156DA24046D223EC147341E812988
+:8044800089088713238488082328245C12468109E8D02212A8148B24F0F5242420218272728432128C26318219E82498818818871498881624082A883221462416E422A4184AA248006B282B184384A281824189212E08A028C813448808A0852210229568D0E90C1001183413541480228432231884448004898AE4542384888C18D21231
+:80450000046634818C91C62B41B0411271921102F0812200888221C0821C68149820C2822A410820F8B8F7001212190749011682D424842265483E448022C8121148612C82E124211C88C294801444B1820282002AB1ADA425924148A31814688444882822CA024932146024284CFA39149018200400182128129215A441228C0441448106
+:80458000322224CC84819221484A8891242114301A99218401488502002A3418602144800A800A28882CB21844E21C0D2C1414045A22024342018428800812320020284501450215428208A0412008000010648222008822200420210410624144421FC40A184C118482A512126722281E422E98001A0412B664611426B28422D71C843438
+:8046000062A115C254296924415288251821042A31848B2149712468228C1288E884034882284AAA2CC014604689C246BE31C042803111224420611444B011A6944338482200811A0480014C38214A023024408282290912D08162248280A48416140821820018C024222928E14421FAFD2F244A02A11428150824244826026C08001C52C0
+:80468000144225621446211864844E114631424678427441B4422888B8411287088E24835C185C84C44468C848811031842A9448884D8245688290246F510114952481818801C1441288424282461884312A124321CA28C0930018821B81002C81B22101E86B149012008CD24211082123024227A228A931244D284A22828408BFF90180F8
+:80470000224248281628C1423A64348C6A214C2422B28824B48862826800281964428954424827828C9412480029018A914820048384698C8D1216A252962838C8824212128D948021F5ACFC5021124829224474531411988484604212822480581200881446E86841886882202838882CC148C8442884A018A694222C0A440000522901E9
+:804780008248200250221F320BC612518140482214B1420184000029318231141D88A119D418840215088C34124508851208124E81864248129C1186D942322A27412342B81814E19102811285C4441A28816D585F82021A92241AA4211D2689022243C2222828828270286443436144524122328B4881AAE41288328822224814428A0229
+:80480000002044C8444004824C88084280446C15820021484FFE0A440041121184A11184A0142901A90D81830228884110220200803112112899092810042820812101412841004426042A382A484E8822F06A57144180C249416B14644604458194884241244246A418CCF241845CC19862A0284116180452228044022411212351424468
+:8048800012A02499B158C2129018882C0338D022218423042F5D0416A84148008021C12888196841A0254008422B8140082D8845D21441A282008282E098011184228A34E42AA1288288A0825048800A0000002398228B82AF5F0A3F72768495138F8143EC123654CD42CFC2B258A668814E8458216D4413D6187488F649E1EF98F2A82109
+:804900008F8484E9886A189B1322848F61B1248A59882E596A7265921486BA74D1C4BD8C62A32D328E246FA1F1442287834E988E5819FCA2B46394884B711AD262E783E518E822F461F430442B268F82D212F43922FFE1D121D5113241374A83B2F2BB863616ACE522728834436EE1A664421B44AE819B6A97525F2646734472C8B2246E84
+:80498000AD85A26A9345C24519D842F88A842364834F1CB82CB464F5A184BAC8F22B4119E81631182AF4343C66FAA4C88789421E424B24AFBF47A1111F81217121944442A5FC121C2D5249F9438B8CE421E14CB8E8D888F116FA4FEBFB17184FA1B141FD14881D3247E46F24D4C8E184D6CABE117DC298413F8DF452928E821F19BC92FA82
+:804A0000A26283C1628B2B1F74D849E74D781AB848D68A15922C87218FA97244F298284AF488842F64B164B888AA368E9C4FFE4D0100002400402249022412200882309120098210032908290922702201002A084D1190841004000024C02450282004F09A7F1447246F65F1141C9F93F39D17FF7B53CCDFF6F244141F37F63D218F2AAB4A
+:804A8000D54F6DF884C4CF62F2286CF5BB39F1A697ED9C9F96F6ADCDDFBAFA838323F81E154F469E424F46F626646E72AF89F118383B91FEB41F58A222AA0A5B3BFE724F2DFBD2D27FB3DA8AF49A8A2BDE1F81F4D1614F46BE424EB458F132A4AAFF78E88DA86E644F924DF16563EFEBF71D2D8F81F15D15FF555ADFDFF6D357F1ED6C1FE4
+:804B0000DEBAF8EB4DFF8484CFC8FC3C348FE2F6BFEF3FD1F9AABAFF9CFD4348DFD2FCFFCFBFFEFC6BF85FC7F76C6C8F8DFD7CFC4F4EF6E8EBAFADF1DA788F99FDA4E55FDBF73EBC6F4AF6181C9FCEF4F87F2F6FFFDADEBF56FD18D4AF88F85A789F19F4891B6F4FFDD8D8CF8EBC5CF16E646FC7F7E2D88F81E165FEE67E344F21F51777FB
+:804B80006F41F131311F1AF63B7157D41F16F24D3D1F74FD2BBD8FA5BFD2FFC4562BDDCF67F1F2FC5F73F3B3976F73F9FFBDBF97F7ADDDCFF8D97BF866866F55F17476EF4AF2E4426BBB8FB7F6FA3AAFA7FFB3F84F6FFFB7F58F81F1A4A62F42F2B53D8F87F7A4A22F2DFC87C18FE6F68A882BFD1B559F9DADF62BD44D4CCF8FFB26A6CF0A
+:804C00008FFD6AE88D884DF44A4EF23577FF7BF317351F13F37979BF55F65F1FBF76F34F3FFFEFF7B3BBAFAFFBD6D26F6DFDDADAEF67F3EEEEFF7FFF5B9FAFEAFBDFDD9F9FFF25DFCFFEFEA3EDDFF7F67F7FEFE7F7F6FEEFE7FEF676AFAFFFE2388FAFFFB3FB7F7AF6BFB7AFA1F9F626AFCFFFD9C5CFF7FF6674EFEDFDDFDFAFAFFD8A8A9C
+:804C8000AF85F5D9D99FBCFD66F6EFC4BDECFDECB8EFE6FEF6FCFEF88F8DDD44FFA6260030228440583448268144410840E68904135128401401110085048D24410000B0240129016981542490841608926081A048608144124C22A124F0BCEC4031111081E1411402E08864148028480430842324480188136844654811048844884A929B
+:804D0000921B242A08888E24D081E2220888282D82282B841114439212803224A98804471A4FC1063CF4112485F21124A7241F41324A1D24AB141F48B24AB911B24A19B54A79A5F84A9143FA4291578A2D914F8AE414F9A44A1CF8254A16F1254A96F121CA96E5A2EC49E2A2F491243CF4912487221F49F24C821F49724EF18124EB941D8A
+:804D800024AB9419F24A9251AF243924AB9443F242B64F82F442914F8284F9244AC7F3E0B2F41164CD421B21A7261F413262157C4AF2812487661B218DB259A684478A2D334F8AF44231478AAD212B4AAD254F2AC5214F828CFA2648F022C88D242DC38F4992C29E2C2D4A1F49C2C217C1CF24F8812443F41128EB84282D961D6CAF243BF2
+:804E0000854E324782AB9443F84216224E94678AA9F1A452BFE704848248000000004400000084000048180000002100401884040000000000A011000000008E39108452C12014342400866818AB42884491281B21B024B81876C1C43114444C24022D7811C02429081634812304212A884446784412881202C810084028088F446148891A
+:804E800008DF930B2722922884CC48325868AB8645334840682892184634214224B04428811663445C02888B86888CD142A2426B166C021143116488C8892A741431482F1A0170C211E884A118386888583641F2177A24608D4D29B08444B61C2632489D847F8438222E8845C218326E1126E148C232741F4132117279A46811278313C894
+:804F0000282E861338224B25BB432E44211149CE444728B068384A4D2343E4122106390C12818AA1244D4A411648F2924B7024820284810048230AC04820C8814004428CA4848A044110C42448800C8C4104861402211240B84848041285228808818483248902989A840A6FA107100180C1242A41581C682A28814188081C6A8810111873
+:804F800001480016D52604488304B02408410028A02826E281044821908A1984419882484A2202412848BFE1064B24A0121882256324124812123B82244A41240130B498BAA4161F88342128212F8214B12DB4242122E98368252EC24A82CA3295B2942265882CA8A486A925214260141902891884E841221528F27FB1C06411208198243F
+:805000002E42124588C1221818838508190A4B8219E98124C2884824E033642489C4242E48189E284B782F288426AA2199E24AA13484A31D32C82B24212D48008501424B42822818009FBE03002A011231294198412A84B92148024412308812A0821395411C8202A554414D21522008801204502220A882A086111880C8411C85328289D6
+:80508000082849C1448C22F6F76B50484883011A04282422951494180041A21219C428181A44428C49021AA283A9850316218DA2292F8A91128AD1812E81311447222A048052428E181E68981302422D44822E428E34A85F840A8015020089941140222862412F42A14131491A48A124E02128C1122A04807881024043628145410881486B
+:80510000246024301416A2818344C44128A041200828EC08581FF7094A0140485848D04A222124118108109848418A01002024184431484443342468228200400446644A8A022006200800144301100200AFEE0758128C018C15A4428D15324681C128C0144391298B4987549B186858C0144E828E424416C158CE192A8582B52264884D08
+:8051800083127018448894844F28D6242261239828219CB51824A834162468442AF844A84B38888FED0C430821844058282821C42938112C094622C8248022019281800228264214462422B922A1212E8212881B284D121A82014386048C8428081200460221002E417F2C020020C24185D218028489CE881129524212250C101105178116
+:8052000044002D1E83820820951450848072282158410084188921AA21118152804396440084004E282FCB09800117443041245142C012200822002240CA448848888E411148A1C88121811A5412E81298A021884668431B248846084288848C22648CC0884324082E1412DF1B0E8280821134C428221256081018812848081A021741D0EA
+:8052800041014420512200205142256241604422824B214C030011281E220010846122202223A242145F150544288014391219012524180270121218D81289149682C84B428A94442CA4421C88D485A448A4482E41488C84044820242CE444A88446344846A43428528B84304A4628548400F08661001614248111449218224440B84201BA
+:8053000064004140146A43E0410884431604124A0912842100841840644118301C19044B81898402E2284C48088481C0F1A0422812284210C2224A81A21811E0441A410413B38931111911312315D28179A1D481B911348124E082441D41944281188382286188906C22407548014245022002109282482DC1200124442187194548041077
+:80538000880181882C314C840088882400008418430411862101B8888200A840088288CC0228A0218011621218226483F258CEA012824C41220149154804608115981143218121B124341880A4384004404114486422A01418823880684320449414C01418008C888812A4422012C449F0DC7A400C8C46918C2180C128004422CA120286C5
+:8054000014113842101292418921948410388485028712205A82A061424280C888101168C854284098188638112088311288EF1C032A61491AF221121F41D81358854B11C14C582895F2621A211B18448A911415D112F1474C9EE557451B4447741B4C2D6B7F91F45188DE469E5A6F21F578224B44EAA2154F183938824741EAF61848AED2
+:80548000C49AEC828EF5A9724B844A94C88BDA2E44A76E1CEC9296A82E284731E09A0949A21A641E4467844F45F52A2285F8627846A8111E11E015B814CA12EFC17818E362F314848E91C3C64147719DC845355C812D41854894288CD511D122BD82FC182882CBE22A66814B92CF15F148344E155F832AD5590226A824A781688146B43489
+:805500001164D2623ED5E04184B22CF144218D5385EA55F1222716F4A8728E88848F18F28D5625FE1E8813B461F25C889D4A169211AEB28A28F82A381F42A184C74849384A17866748A7A147C12AA242B81E11CAD944694C8445388D8344E9897518A82547C1CEB24D186F8E03862AB148FF8878AFAF0A100465C14845012410240848444C
+:8055800084248A44144124480485140111441110040023022A088884002A08419214001200241028514890289F1A0C4AA61485FA15729FE5F14D1EBB641AA1158ABA8CD833F15B4E3F74F58AA88F88F8DAD885A8CE5F5CF88F89DFDFFE9D99CFC4542EEF2EE421F518D817985E5A4FC8FD145CCF6BF96C766F48A8CE9AA8888AED84EF8B33
+:80560000FB74544F4BF96CFC4F83F34161AAFAE8885E188BFD4763EF4CF8DE146F5FFF35344F43F13434BADD18F869D6B054A673CFE2F215768FA5F15E4F5E622B336B37DAF38C84B5F323447F71F53F1F8FA8F898989F92F2E8C5DFDCF88BC8FFCFFCB999DFF5FD888BFFB6FC7677AF917588FCC84ACFCDFD1C5DCFCBF97C7C6FE9B8F254
+:80568000AFEABAFAA8884F86EF87F37C5C4FCBF978F85FD3F379FD1F8AFAC9B95E588F8DFD84AEEFECFEDE3E9BEE4F43F33C346F43F3B8F88F87FD83F6E044C65487E15F61F35B4CDFE4B143E621F1525CCEE48D8E3D13BFB5F657D7FF91F99888AF8DFD1C185FBFFCD78DFF98F8FFFD5F19FDC4D4FD4B6F26FC53536F85F58541CF25FD22
+:80570000C4C6AF75F788FA6E726F83AFCE9AACABBABB78BFA8B3FCF7FCB48F85FD7D399F57FFE9218F8CFE5848DEC86E8A2FC4F8D6946FCFFFF4BC4FC2F2363CAEFC8F82FB9658F054644F43F33C2E7F75F35E5FFF75F553722F43F36E7C4F4DFF989EB5FB4F6BFFF9FD979F6FA8B852F57D7DCF5EFDDF8D7F55F4E5C55F5FF545D7CFFCD0
+:80578000FC6F4BEFB7F7464D5F5CF4CCC64F6DFD7876AFAFFF7A786BEFFAADA3BAF8B8888B7F8BFFCFCFFFF4FC8F8FFF75759F97FFE1789F9CAD45DEC86EEA2FC6FEF6F4CFCEFEF9F88F82F23C3CCFCAFF68D9B7FB0080012C810412204142482349012011180113080021812911881818044100A0828443028884001486080086C82416AB
+:8058000048240880028D9B200841503415981E10A24818D02811D42A3884181508D04A094C61285451009601F02212E02221091A0280684149E841A2821741902120018021123234209118226F65082E521F41722CF21124C7141FC1766AD341F26A131F48B24AB981B24A19F54A96578AAF3439252F147BA4D852F924485CFB254A5CF868
+:80588000254A1E215FA264192FA26459ACE449E2A2F491246F22F49124CD831F49F248811F49326A1F48F24E911F41F24A9219F24A9153B14A3924AF2439242B94478329F924488B944FA2F41776F0244A1B4143E2C154141FC1722AD341F46C131788AF44F18124A9B385F24296478AAD138AE444F3A4482F5451862F54FBA41A4E844DB3
+:80590000825AEAA2645D2FA26814BCED4582F8D12C65F21144CDC21F4192881F49968A1D4469E941566A1AB642B395D42AB224D428B92494184B43A9B8A2B44AF1A41A1F5B0C00000000000080028008000028800100440000008480042200000000000084000014E04301402602678295942230184C81812401818148802252482AA5A4B7
+:805980004142604283245284AB242001520012182A91411221C82F81041C22045086424944481828B448918CEF9A05F0A211842D18242A95141F2249041324423A146042843088427651148092284C120280C6148B284686A42826E212018D84C014E0822831A42482196988C042A02138116A7134C821286F54072453C7222C017B123295
+:805A0000139A1849914522163816282281A0824247B34F12A5424B212AB484322242288F44B22211C116428B522413048741325601232ABD2C11C421B601244394424E341618C17249C251CBA16DBB00104A382C8C14261106184800814528048122428008814044087048E482280482221A822108441884248A442228648840088042184E
+:805A8000E881942870FE05410000110081901880118428C181414C214251844A08812AC4240040C412004218448860241E244A082364812098981028110200448444F0C8E2E022815226842783A5522583028223B821018CD92C512426BA38388149618232494208904348848CBB2221A4254C2402222684484868422946A4242266018A08
+:805B000005808181C851481A2485B67F082E12226542C2329502210089292181D82408318D241C99349126EC461808221448C0124961211A044A02908482421E248A06290440C18812001212821B4144844422AFF905410081815041831228183221701864814CC1A8294904281800842CC46410688A2242224604124C2202854248A624AF
+:805B8000418B5222CA22A148812C010080A4141A24F4EA661088448AE281562A3418218439D1A1014F82012088A4412840E28304235182278826A221449D1483212888C4416082481662428E4800241A444A0C2883222814684A44666281F0138400298501008C14883114001634A2521002001256028B1420A44820688440D241E2812270
+:805C000041A8521682C84400188A02A0141604A82021031236C116882E145F12080015441122822112994122001018480820441808800612001888801442821A82280180015628042282002D12812001134808B0A80810C2182CC2782CF218411A12F11148C019124CE9811458820040A814424824899442228AB244C18D167AA4021A7423
+:805C8000E2A1122E982928C5248B41188B2980C43200A012824068483634448C28F288D30012451341424842981A442F12012542088088A4142A84419838A44A02834122412801422E9840022051248008424829C14889092C48981A3A842183688318415F560945021042081504442228184098488141814C44A84142224A013044221879
+:805D000042442084018823054241810048008A01441982144C08402401F0625400001110C13A84108805482C0424199C11008413C3182C48021518F824489487388B848688284A41A4418E1C8890688122A24068948718908812828488180012E90B20226222A01222228C0122262201A0428B2122182828008C82820280848202120000E7
+:805D80001648428C02184004202101420018201442A2846FFE0B28480012101208118425289219120098198811124808194832182C0416C2189230C81218C04222821838488C018F14131892288C51A6002141001A04F6048284B04141311180814281C1125022C0120029226214184E2100814A224801420016A884481A02C80048006870
+:805E00002422230111244118004480015F8A054604414141CF2442344243512C11204164C12D841644DCE1014D18426381189441694864C12259014E186214842185128C7428042849C498444C0888421A88D22A48881898188C023EB900E08104843011002981842424A442158884847441487221082D49142110084424200228283444CF
+:805E80002832104198284028514911008420010082F022A1006022224C110218800210184224042210420441262228482204648800E08401C0441281000056C412004418411225240481428984D492098CC1244C042842816CC4282341C1448002989B824826D82405412914951443B211086081428186210216682448E012214188D114F5
+:805F0000418842043884124280428C06218CF8EB8280A1484415D244714851962F87E1412112A1161E1229B41EF41A71CF4831514B422B5666F428684E461B783D812C9451891264C3AF6E4DA8818B43D81C1CD188E14648147848384885A58E13D122F917114B81526FC978429C82C084850C4A25F42CC440B428F22C223625F231348F10
+:805F80004313782CF8192C4E39872129764443B844E8173A2C19D338F216421711CB116E8947682F8272449C4429B7484218A27C8C1288B214034F81E697429C41184B73CD288D1A89528886DD98E324751CD224E18121B854F612482E88C89FDF0A495642122B2497A12C54214CD422D212B132944283D488E14661A83D488C7FDA7F1411
+:80600000D898B144E192522C224718A713278C87D55D1257118B8D85A89C1B2F1E122F247416F68A12CB983AA3231E2846E841B524668948991111A8128788AB2445081887218E183F3E045241B024014714844184454108400444402458681185145148214450481181718902400122151854811815287211988415A88284888488222C1E
+:80608000289388228B8432818FD90E4AB524F2383A3D318FA1F63373AF95D2AE56AAB5AA644AE664744AB212F561832F86FC51122B143FD7F711595F92F629789D4D1D839FF6D633F433791F13F3313D9FB9F99818AAEE8AE21BA15D3E329FF3F383C11F4EF63D351F91F331111B355F56FA81A1273A33CA818F88FAAC284F8EF634B43B33
+:80610000DFDF48A22C2AA2D88BE8DB77A0327AF72C2A3D333F75F22362AD6BAD7AEFA3F12B2B6F44E624F752742F25F512363F3CFDD3DD1FA5F5725E3FB7B772F62B318F82F3F9F31F3AFA68EA3F32F27BF99F53F72977DFBBDF99B4F8FF78218F9BE7299452BF73F38781DFC6F634348B319F17F55D544B919EB4373AADA11F11F9D9F9CE
+:80618000C7ECABC4EF43BBF2FD84248BE42B22BEF178AF2B065E444D448FE3D373711FFB77338FC7F22E7EAFE153EB1F76F662722B75EF25F55C1A7FB6F3FFF95F3FFFDFF1FFD7F714587FD2F7687DDFDCF5A7A2CFE4FC5F517F95B714F3313CAFFDFDE8E99AED8BFAB1B95E523F31F53A3C1F4AFAE8CDCF43E385B731E115F7E4744EE4E0
+:806200007EC33B754F4CC58AED8EEFE4F5BC162F84DE987864F8C2982E388F88FDAE61E047F63474CFE2F21737EFE1F177361E7EED7E6FE3F32F3FAFC1F7487A6B556F65F556567F7EFFFFFDDFF7F7777F5FF7F65549DFD2D3D9F3EDFF7F3AFA6C6EFF13F35F7DCFC5F7797EEFF9ED9AFED8D89F8FFAB1F92E623F33F33A36FFEBFAEEED2E
+:806280004F43F369699F87E717B6A4F3F17B3F36FE42415F5CF5F9598FA4B96AF7BE142F9DD7CCF86C488F8FEF95D588FC18A600A01210023440224162812448241B4180044800100100218B240022812200C0113026400100200100484412000000EFAB05822012413311A1405281805428008481122C48A81426088450224028141518E0
+:8063000022A142C092502A4C0216180818CC1208A1604416D82262821084228221F22E92C0421F41722AF2112483F49124A7141D2CAB141D2CAF14D981B24A19F54A9143F24A9143FA4A934782AF14F924488D914FA2C4816FA27418F1244A87197FA27498D5A2E44DC24A1F49D224F49124C5F2912C83F4912CAB141FC9B24ED1C1B24A57
+:80638000D981B24A5985AB944782AF2439342B94478329F93448984FA2F4FA48F024481B6167221EC84F12D1817226F111286B161D282F56D9C1B24AAB21AF5428FA4AB713FA4A3613D24A3B33AD94AAF148B53F22DC48BA217188B427F588242D939E25ACE8C952B413DD2664C94E911FC8B622E1C9521616F86217CCE614F314482F141C
+:806400007324F84A124B41A7444B41A33436A3D424F5F79C008004000024004400000000000000000000000080040000002001280000000014F0339130142514044661422210048C85C4181844002444844413444442141445012826448264424216815812901A0024E08481C528192425210484E9F21228CB2541C044BBE71420E8A24186
+:80648000415882D12C41C82110081062924A218269226280C2491D282212222741811849243148444ABA12D284311828295182308445322860210028001A48061AC411F08DA614444364A21415D848422151C21C325483B4282111362158222959282446019B4137824B28441163116843158295688364337A781289F5281212254862483C
+:80650000857444C8283E41422004818F2158A42E1E181C2175FF062C0149014602C30200810000840044224E24C02440041621022290441044840C41842100001AB4220124121822002D2432424904418BFE8081022002241D448110889288844088016C1284028184001A12D14812012011044100840081C42112188221000020242934A9
+:80658000844A82F49CC62441642284D11624420AA32266111C51424A8142346488144964122826344484004881C562644344D2140151163422C042113B41B0240C4628A4811CA1B484988C08AD1410044BCD10868242C82900178481B02844E19118AA148118222225E142C42181C1460422148C44586880012711108111022C443848A057
+:80660000871288481A28A18284888288C18842F0565C805124004449612245423228200341801294448644042082028418302411C0442D44444441444183021071121542048C1402114A011846283152412684F46E86201444988A1828001412C844C8122419082116C814282CE44164121A06CE182191804194212140B822083C0C2C06BA
+:806680004182244AA2248748811A02808403922480F5C3F47028B1220480180623721698485048E02288218234418240C81211AC28018200529490451813618810A44110384880954881857112D416C42425424808608285A228F01D922001A08282B48481002828A5C144810010210240280428C016100C52000024182081080049218111
+:8067000001C048890800100444F0DFEDB031144658821265092C6291124A4232486C4138A346621486C1142688D158F4488228404816B1144429E1421412012D824C1121D1288A04124D528382338267144B418358824628022E84848684F4E85F2088022880522A84418C84C8281CA848180090182280843121422252291148289144802F
+:806780002181880292214881444A48A8141D4889415828008001890128B0850E002180028400100444488100200120044891888034234200D0429442C01140190600425180544110648888508400428443B57F4E111741140100D084210880A22818802128322C1B188282132828440C122244266111113024400A10450420810D21842A8D
+:806800005122452231124282121E84F083682482224140841244110412004044488842840428281244800500324240941848001820914213045825284804218001894C2201006FD50484442321154A24C11490118119810180011011123284182312189D81B648820845C2411215C4A33034468A081E2890242012B188718C318890214CB8
+:806880000940042884AEFBB02424044413018444604840088228004D48002002490412418042040014460284202282120800208601A08118004608424814CF1A0580028096283048201489044C123845312222852402611382023021A0424042440244484810082144881032120061452818187482A4411086F4A976004148213014001017
+:80690000818128018088414128988E15A484881C58481C08234418448811982180110115041348381130819081303100488A8181388283788AF44AFF14308889C1118D848818810014882210844808242828841068424602868424084180044883220226126412E02264481FA2244102408244C64212004282AFF1078C9112400281442054
+:8069800001400428004058584254397443041813810D242082E414084048D41C7C4244810183529422186C18B8816288188480622868451802BF854981671D4146F6F4248241D4121F48D8D90132C826681425187418E424F482222E41472351937849F211458693134E242AF22448003447422B154CD882F684263C328A447447292FB161
+:806A0000FCC2321D828576A2548C8243656927AD25024D858AF823FB503247EA1E121E1115783CB418115C8446014E8128434814088426FA22A44B815FC842E41CE1125AD4CB14CB244E624840E74DF1454A5F84A36C8D2197828724371247411F92C6295B6646B521A28185C8884F21E82198886C989449A4B85AF4A8428D1CEBB52445A9
+:806A800084524A11A18C42AC144C8121B188C114301C4B988F11F1E8215D21C57821AD84CEC12EE845ACD1A083222F8AD8442194422751291441FC14235C1188311483B48881B3C8C1416F597181D189A3182F679118AF8486B954D48468854F24F4CDDA2084016186A8148442124F1428A184124E84844A28E14408642004441088012148
+:806B0000004A92148A1234814B1217886332812A7181281221321126628160812003328526422403EBC3341F28D16451E81F11F551514F48F34C444F44E44131811B5D4AA49DC2CF8CF644463F197981F1E541AEC2225F5CBC81F869C95F18F8C5437F11F524C6828F887824F46C4A2F23F188CA2BAA1F14F215951D883F68782EFF9597FB
+:806B80007F887825F4989B3F1BB9D3BD93F992936F28F88D81AF6BFBD6D46D266F84F6E6A42BCACF8AAEEACF62D8FA4CD343E16652A81F31E54EC624CFC454444AE41CF44CCC8AA88EC28F86FC8D8F2BCC1F1EF6A1412BAE2B88FF9EFEA5E19F9AFDA1A8DFF4DC13F424462EE2CFC67624F4684B2722CFACFCA7EB2B8C5CFC288B5F78F8CA
+:806C0000898A346F94F4CDC59FE5F5D2D52F7FF9D3939FE9FB8E86DF58FAB2B6EFCFFF46666D24AAB2A2F9CECC8EC8CFEE7D7245F341533E7687E17F51F111115EF48F45544C1E145F44FC595C8F88A8B14DC4CF84F48C8EBF11F945C55F16FCA2C23F1EFCE7E11B88DFCAF9CDC1DF34FC171957F2371CEFCCF864448FF4F6D6D6EFE25643
+:806C8000F76F4CFE34758E2D8F62F2ADAE6F71F34E694F46F6D9FA2F3BFB5AFD3BFF2F39F38F8FFF79F99A966F6FFF86866FC6F4EE8C2BE8ED584BD84F62F978EF341F5EE761F5181E7F75F13B355E74CFC1F15C5C1E145F51F9191C8F85A5394DC4C5F85D5FAB19DF52BA24FCE6A83F1CFCEDE95F1CF4EDCD5F9EFE4D4B3F85F5745E2E23
+:806D0000E2CFC6F66444CFE4F6D6D6EFE3F786C63F56E643F3BD3EDF6AFA282F2F23F3FFF8DF4EFE787F6F6FFF7BA83F1FFB9D8AEF68F8BF1F2FEBFBDE4E6F6CFCE6DECFEEBD82FB4C5C4FC2F7ECCE6FAB03230221808114C4488004488004190448904130814411100100410042214221008424108444820482249264400620088281F0DB
+:806D80002618001E2410110C1816041301160810280184708418A2424282144D48422C61142004901420022E122843022B128422122128A901A19242802119228841F34485C0421F4152381F4132681FC1324A1FC1F24A111FC1F24A911B21AF143915AB944783AF1439342F347B34F842B54F83C4914FA2D418FA244A16F1245A9E212FAE
+:806E0000A2E55DC25A9E244D5A1F49C2531F49D23AF1912CAF14F19124AF14F1812CAF14F19124AF34B911F24A915781AB944783AB9443F3429247822B944F83A4944FA2F4169940DA41561C1FC13668153C4A1D2CEF14D1C1F24A1528AF149325276426F84811512F6442C8A163D21AD8A4D558FA24D816D122DC18D2A2F48825B48F1968
+:806E8000D2A4F4812C3CB491543A1F88744A71917C4A7191FC4A1117812F74B111F448B14781AF147B34B84229F34A122E484A39322B944FA2714901208804000000008002000000000080480100400100001800000000800200000000F0FB32002841248744E094C242412E1883820387148128A02C4140142816C4444C229444424A4A65
+:806F0000853414222C642120028944A582A0872C31C81483088A219484430929018281874C6F48092753137832884A4294141E2826231411581A881694184F21028B2429A42428862CC428211C332128618B61274146D88281422598128424484181F42E482041024664812C914887458C28C4484E15F08E962430E144A8464CE415E22264
+:806F800045E48451842C11D881882303624D4A482483A2C212C3644A19B44422A22C4D43428361918364214A880383148512F888248D32C94CB12808C2A0184D182C4148B24898185AB8DD0A4F1201AB125022104C68322826C12814488544C8368228E0440285944428211A122114B61892144634222865012184244849084E1348204157
+:80700000024CE18144A64887449242604445F8AE7C00000020024228189018000080418802809428A0211852480040022400402141018304220000802802410042F0A898200122382843021662411088018081311C2142202117880248C063D028022481899424728AC182186888284826022B418081840C524082A241418A21F21FA100A6
+:807080008082824224622112001800800100842268844280842281D4280610D82844A4248200288228904825820118480098401284158425F234549018001280029044228D1430182212D068015880311280E28102124E2312002440C128182B148223C14112144822C06400A06820240222102208BF7E0F212A0140044112222A618212CF
+:807100001E421E881818701209811168CC4288442184C22883A642852494224F24011A028138A024401118220414C0288C06102C048442AFCA0918008440440221232411518241100360882692288812422822000084902800008D218210110422422220416CA42001248022A1244197FC144501442800001400000026481C1404400444B3
+:807180000089022001100231B611524228252C0114841001841880110220084800BF230B65A121448441444562212C8266831458AB81164258A44D1983382815E84492148D4422148B2490282AB42854842722D0342533226561AA166C1144149187242242836181837412B83804C0884858626CF4A9CE800180020040210112A14130315C
+:8072000000449022828902422220028C01304826021C28312820026220021400512012022441281008BF260F260120810100180040010014800128122822001248003024004424001180024001100148421018040048A0425FFC041228213C02382587312489013012401482222222113844002262264C2162422248833412001C31142494
+:8072800049914412190211850283141288140424369848414C069F150C1810823212001841180020420414A012106841222023922848222022263412004243010012141411008D42A0244844443018202424F6E431D089B2480213012E12150638844554447B232826022228806122272425A2131AA148164401430215559111855CA88FE7
+:8073000015A4441469B144022200455C474B222A1608810029724852622D261AF1C815240000000000168101110000800242800444221004230100000080020040010010080020022242F0759910C848422C044302802141144424820200120025825242386A29880800461141411868824848100422004441441C82420284005022D042C3
+:80738000716708A4800440010000442A810224180000108292148028028100264102AC22A44410220280041C4424A222000000484221485F720B80060000181041042A0280010000218001881100282814008C02480000000044902800000000218071380526022228000040210120110140040000420042000000002121220022000040D2
+:807400004118180140040000F026BF90228324240400005044C5B424022220011240D222642243019282824C86825111151153A887818344220400001145544443826482000060242542B614F196DF404888C44280022200107114E411B2210300008052242981A11288A8008026D2110250884CC4410000110050442868008412004012F6
+:80748000F287A8001014020018141214002100000000404104844400280024280022282110280200842494140000002084F4A7CB2001280000800180010000008004422240040000000000000000001400001008008004F099B9242821260460122021414111082581412201180022484F5202437241082E4489A2114A02A0222311420461
+:807500008002224811481184A71484105884004200445FB4092723222C022128001112181B111A11410100808204414A84A224B024028082840225622280823222228100501181508100001880044849F4AB1800002C0241808391111301A0111112184112004AA422504444281024322260222C02206222150241801241011008971424D5
+:80758000100828A0644324F4B4B4F0362225C2122B111221C0122592832F31F119111B98179987818F18F44848D09154111C548985F844688F44D444B444F22424224C02284554642E246F23D222E222B132A1812B88C0922592832F31F111119B98179987848B488F84244408488558884F84F423B4F0262265A2321A21210118259282DC
+:80760000BCF1111319E989588889242444511148155889488F44D44CB444A226220028444584F326226D222AA1111A282988512229C8131F3191C19E888598484A24240448848588F67E1A000000848100000000000000000000000000000000000000000000000000009F820F0000401808000000000000000000000000000000000000F8
+:8076800000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F00004018080000000000000000000000003E
+:8077000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F0000401808000000000000BD
+:8077800000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F00004018083D
+:8078000000000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F822B
+:807880000F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000008481000000000000000000000000000000000000000000005D
+:80790000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000BB
+:80798000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000008481000000000000000000003B
+:807A0000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000BA
+:807A8000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000003F
+:807B0000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000CA
+:807B8000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F00004018080000000000000000000000000000000000000039
+:807C0000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000B8
+:807C8000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F00004018080000000000000038
+:807D0000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800B7
+:807D8000000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F97
+:807E0000000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F800000084810000000000000000000000000000000000000000000000E6
+:807E80000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000008481000000000000000000000000000000000036
+:807F00000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F800000084810000000000000000000000B5
+:807F80000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000008481000000000035
+:808000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000008435
+:808080008100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F0D9
+:8081000029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F00004018080000000000000000000000000000000000000000A3
+:808180000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F0000401808000000000000000000000000000033
+:808200000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F00004018080000000000000000B2
+:808280000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F0000401808000032
+:808300000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F0011
+:80838000000081848400000000000000000000000000000000000000000000000000BF46070000008100000000000000000000000000000000000000000000000000003F5A07000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000051
+:8084000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000008481000000000000000000000000000000000000B0
+:8084800000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F80000005088848400000000000000000000000000000000000000000000000000EF9805000040180800000000000000000000000000000000000000000000000000F029F800000084810000000000000000000000F9
+:808500000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000000854808000000000000000000000000000000000000000000000000005F530700004018080000000037
+:80858000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F800000010480800000000000000000000000000000000000000000000000000DE5800000050DE
+:80860000884008000000000000000000000000000000000000000000000000F0FD74000000848100000000000000000000000000000000000000000000000000009F820F000040180800000000000000000000000000000000000000000000000000F029F8000000848100000000000000000000000000000000000000000000000000001E
+:808680009F820F000040180800000000000000000000000000000000000000000000000000F029F800000084001008000000000000000000000000000000000000000000000000AF8A08000040180800000000000000000000000000000000000000000000000000F029F80000008481000000000000000000000000000000000000000086
+:808700000000000000009F824F0184001445C8184538242200005440442461218B2412100213820218B18B245951488144204441C94384438204200240642484409628282C0210F641A9902114154859C2C0262602174161284D38417026C2221B212D2E1362318189E124117452D221611125C91413E18422D4213649195481814845C879
+:80878000448D4247826F2492645132D912D81472249224A342662484818344F8FB4310014008C032261C92114410048002188391112E4840A2142446D1221101112822411B420089048064446CD224C226408131288016081008216024842FDB09280024448100442C02C01810114246012125C118844024322190184C2165448485C244AB
+:8088000000141014020020224211181502AD22904226184818B4990300840041450800002241402202282212200100001421141901404801848C14111808486604404404302280022400F0A7121450181411150800284120021014046C120424002480011602848181481081440111848094480041000049424414840200F087BB00002094
+:808880000200008400000000000000000000200800800100140000000000001800001F180700443524022280E14182421801211A741398A5282825488C81820221B0428202A041813A840110C8114D121049518523342813642440020098491104F05F34B0149215188C12F4542924841052221800A4459824301247944C25142118A22432
+:808900004A518243013B254C31281E421144512AC11348298204AE4829484B01434892A4584B2426D8489242281E48287FFF09411D14188752281F440140323428161801A14994181F22A8126C02C344C12222222B41842367223611A412A43A0415A42187213C654248818DC2D4A523324188212D2423C46490BC29848281B2740B2A0147
+:808980004502418C622284185022004062812D2541D081F4481480210848104204421883841591140011201112611282421508490482189028C0144183049F8F0A00902100230223022240A34129810416088002448C942800230200482820A1122800242841B04208818224488140068D24002084F495AC9026282F1182712A22D281E477
+:808A00008225018CD18204844643785439824B25444791836C83502183A212483829D2A242EC8411C62523B48191163645C819842951843AA84832488CA8844AC8489E28245AF284488385A2821F3C0749829221135282213D284638328082041819041781122E444413022A21042032221A028D22488B416114529A12521470181124D1EF
+:808A800042A418200184C248E4B281214B481248C83FC349023012122822421A0260A1811127842D1283D424948812901C4E88851468B28C2281042722504828604329426141388582121832882883AC2842231C28881438246A11C84828222FFC47D281D24205A02149D2A211D442424268C481830211469824885021181A025682184289
+:808B000088382429447422042227814A018A0113CA821210220200388812288319383689A812211FCF0416C841009011C02124114308122A2821420400410021128C08282C2101221384C844608436081244108838285301C048285042004124008CE2B904007024D11C148804141816012145C24882212503360885048924229248100304
+:808B80001812D0828201100141D08402214088218448B644215424200146C444484E3224126160124D4845D1A2742154341D1298106A481A34A18D441D22C02814443884422D288344EA113836214722228A32442981B111A281415B828E2EAC8198229C82210416F244924944B688D168C114CCC41446F8A94460121301442E111E281844
+:808C0000302250188C8441180A2512842841648180844202220052184654821A0210081800008418008E48448021028022A8242217D600C0212D428C1408004601284800C08800E0820100A889420412CC944420346C4B5844417062084B123024124322028C110285044A480442400C1FD30D902100111C044118601882819902682227EC
+:808C80008849318242151814724218044180A881220000812E888841D01608220026021082811104481212002F4E04409423223183D282C42284901121106E818091266388024932148C420100651A0484CC1104412E5240428E188411042812104A885148000046C814F02219C042C018119042113024CA024229A1242191304830C8A327
+:808D000012918210081282190860494800AC04281A041C148808249698C880A8144AA824884A21014B814AC2483EE2104441C628004904400491846042E01204222220C2212E12430227C28410981C1082C4252A840290289021442C12110288182B86812325B14241A814488C08CF270DA4221001418CA21490282384214891816E1280B6
+:808D800012C818130800188D1412004200208161218816180A006081430824001240084148844420F1ACD380028149E4410421200181A2408404490186024186C8C8C188211CE841240414E04801426011448888194AC821A021160240450C824810440418F0C8BB004444848514611241C41150281B4224831204645024002810A421000D
+:808E0000254442480C84005042004522024140223218124352423016004508005F94024E3C9042002144226882824C2481541484C4489B24481644548280012A08AC08824009404884D414D22208A0C182C88296058B682048048A2291228229C448DFDD056E1655343A2D28AFA1F4694227524E223A23044AD8187C41588D6E612F6E72F8
+:808E8000E8A8876E884A7829E588782898AB442E3147898D488C74147CAC46984859847684544A9BB44F887884C5814CC1144722ACD82268819BC14F24E4C1E824B9D4684446D88294D48F4468857E15002F12D2E1F2214515444108F021659B8C26EA8441E2130A4D1945F28C262972168CD254847244383440B485B94EF848811249041F
+:808F00004A682419C1228421293A27492A92F1281B258869313AC3D44CC4444B514B118B2483A543F019A8906424457148724451C2DB644F42714CBC887812B18B3732ED452744CD1883D1425692CF28F528314D888B236721A6D6A87314CC422546A618848F4D7174EC417314F4326A4F83F8A2468D261F26D1C8B2B1B41C7A82B4B2B165
+:808F8000A8D12A61A8CCAB18278318298AF4141486D48491483FB305122011441844081A14C4486089C048441F810448441A149841448A1488058880A82418422A011800200442124220240882200AA2200AA2811F540D5AB412F11818CB228F85754DD98AF248488F81F1C98A2F28FC2322BFF7F5CBCA21AE82EF8BFD8CA85DC92B8A7FFA
+:809000003DB96412E44CFCC88887A435F14CCA2F88E8ACFC93D12E42AFCFFD48481F1DADCC1F1D79A87AA1F548481F5AFA8BC95F1BF7D8F817546AF671738F8DD1D9F5C8624F2FF71A182F61FB1A38BEB6AFABF93C784F8BE383F21A12F054625F6256B93F33579A97B4FD288F82D28CF2A9AA7FE8B823FA49CFFFFCFC22251F38FC8A8ADA
+:80908000EF8AF823892672C3F167288F8CFCEAF88FACF8EEAAFD29CFA5ED8CFCC4CEFFD9FDADCBAFCA68D41FDCEC6CFCA3EFE7285778CFA6F6E5E7BFDAFEB175CFEDFE7335CFE2F22B3BAFC5D3FDD4AEF2747EAFC3F31636AF85F7F4F6EF2BF91A448F81F57278FF52036E527F7254A87D249FA7F3676DAF94F464648F87F5ED8FAF7CFCC7
+:809100006BA2BFBDFFC78E31DF36F65F59CFEEFAE3C1CF8CF8B5F17F5AF8C1C14FEAF92A688FA2F87755C5FE828CECF8C3858F3CFADEFCCFC4F6757D4F66F297D58FAA72A3F52A2CBFDEF68BACDFDDFBD8B85F72FEAAACBFB3FBDABABFF1FCCACA4FADFD7EB8AFE5FCFE987E56AB65EB914F8DF9E898DFBC0B4E725F62F23D3F5F75F36CB2
+:809180002DDFF6F64F4D4F47F75C7C5F66FECBCEBFA7FFDFDBFFCCBC61F4347E7FF7F7EECCBFBEFC7E7E7F5BF7A4859F3AFAECCEEFE2F626AEFFD5F79C1E8E82AD8AFFDDF9DCB3EFC9FB19385F57E723F3BDB7CF2951FD8FC6F6AB2DBFD8FAD9BD8FADFBA7E7AFE8FADBDBEF8DF98FC5EFAEFCE4FAEF8DFDDEDEEF8FF97456EF84F6DEDCDF
+:80920000CFABFFE8D88FB60C417022415832484184404801248C44454842480628C0248002287048141618141804430221844F22084150241220416281241E484440243148124482EF1E0F220084406812844A812224110A42A034224284892118489288604120081288128C2484214182020080A1212C889288860812881A94881E48603D
+:80928000818B8486F16921C0421F4152281F4132481FC1724AF2112CAB141F41B26AB911B24A7915B84A7934F84A9147832F147934D81AF934481CF9A54A8D814FA264115FA265192EDA96C5CADE24ACF591242CF591248D121F49B248F19124AB141F49B24AD141B24A9921AB9451AB9443B24A39242B9447822D914F8294984FA2F4991A
+:8093000015E0A2F41164C5F211644376117C22D2C1F22E121D24AF4258C12F14D385522257824C732598225782AD14778229F8251A85F4259A83F1278AF02148442D4B1E252D4A16CC4B1E64C5A36814C4A561C9A5C12C2D15CCD21A03AF743324AF247124F8421226C8946F82B44AF124525FFF0500492408000000002800200800008041
+:809380000484000000000000002002004480020000001022F4CCA31460428144400149624219220281830425486C82C91208874A9904C0248C142C42A2418F240121521243522485C48828001621028181442184844D4840D84864814628F222E57024424204C189628184844288110025A82430842361424F120970644842C21425C2C148
+:8094000084262C4AC48444222002224136C81488F08228189293281824012F881224B98466188974FF45016B248441849C4228C22C28490281C02821456882C183C2234F827848B13804276A8D4224A6416AC51F284146D44824B144421442684281601130AC83618ACC2818247148224878D4B234E888E485F226BD302410064180410C74
+:80948000198418018C14E28204439832414C0910046041452804282E488028210222C42A082A6141882821801111421818942841818C04F0B1178001418C52241638428C1604204801004400104888210A254881042A64440000002120420890881281114200602412284F8B04228921F2E653204601218302533A14896381232122114881
+:80950000341C8C91A836B68CF182444CC42446B825A4244F85322887644D18282D44C1421CB546E118120517C162DE222C4523B691727288984C83B422919443944450485842428F3A0C2A4401A14592181183D448C218A082191108439118895A2483388A842E14425125D8184458482D2426C244813011441414609326289E1282294111
+:80958000D183A148814238182985D648091A9218425F9D021810846282246E841E241224120010144804324C61444604A688A6422E142A24E481C4441084C4424A612A4140842461241528B6A8A142304481214B8441442A54484248226EB4344D184944140945522462214658942829860423A249241781C0214241CF24818A084049D866
+:809600008201842532512661841132A3328B424542D126611882A3914869024002150A248904BFC50E8C82150200141200418012181854824F1562422484890820918AC0688084C44921960884429811425082184AE284CA28160459A82440B81442354240C81423F44397001008419B42008B212504160821188904008302100140742CFC
+:809680000292800888201222411C0428C0211608904900D022344410418102308CEFB5094C821152184122E021C22825088C21344A10FA82484E147782850284444C245A4A47228C16C942894942D828914126015D981B1221882D4819F122412F26C1888531124DC1630446284374422A1288918C1758B08241140CD0C1543648184C54D9
+:8097000018282190184B4218138221D218B2825412A40081204928C4488229A8212112407468D281024C9218866C129A1448488254424121007048C442AF45032084022002141181242218448608604840C428434AC284824827914110024282621220041284832842E2881648088460950000180080F4342300150422260450842083C8F7
+:809780001111902282830B212B8224142D282881458106A13CB4412802107832128112210B100A1348112B32892289028241005240F82FB73081004160484548A82447A822188800290228408202002121800126012100100225D2848804A1880014460290221218421884004A41F2BE2F402882240448421008182C18A428501423422194
+:809800007888819148271A9C84712188D41824480820440A19044840011304130843041304008336344290128440E4AB0124100813022400180000134208212450284846232224721851424314621628182F840268198812A1288C841284D2838411011111A9042D28CC14820484145FB646419C21152442040013048C18494804105484C4
+:8098800036889145844781431C0441848C38A884C088200970882411C8862489951A002142810081414018F2284422F0ECFD00C042800884148D16C0124091218388288868188922681888811568A400188089082441001486244401114241212E8200803812202149882108BE4CC02147881014082314D26242042622012147821421C0FE
+:8099000012100400124482410086420A4882411C2804800400808441024100C044121038185F970845084D411C1491844144201C6248828972114211CE21A354144C012D44342ED425C4823C31418A64228CD4140414150C4C4418A1149388183142814485E1443258290527A4812181307242DF5C0E15F4814C87624AC22443784846D581
+:8099800029D468A4113B834F18D984E882AA829E8189A89C8E88C9D38B38AC446D2815F64D428D18476513AA8E26887842E22111E418E442F896598F145481211B88A961D825D132D411D1141493285088218CB91A041E21841ECE50144358142A34A9442D486127D26B8B2CE2180315B281F1842BCF42E23A32284F51D1E2F4C4654E67CA
+:809A00006F9AF2C84665C92D4F1588EC14C6492F2CF648428C76C3B4611BB18992818CF348C41B664E181F82B24BC4461D886897887A7742E883B562D28C341EB07CC1886CD4314F61222E2111555414624195B844C318AB8885321B44A5534B255A4725FB2B223E81D081F949C21CB868B7125163A798AD883F218268C98342D812546263
+:809A80004551481B8A96D2B8586ACEC3D089A124A7842485BB145D2A4F48E565C1428CC1488B5683D58D05302450141044480240088414841001114413480446146144401421044229A82414288828804681C2811AC682288880A8412C28C18213918890A812F08644E02AF226288D2A6D6187E82B4C8FA4F449495E34DAB796A999AF4B9B
+:809B00005974EFC9FB28289FA2F886865F49E9C6F43B188FD4A4998FCFFE81884E68CF81D5E8FC11522E431E528F82F41436224F5AF9D4744B2687C28F42B558F73CBFAF8AF8A68D8F84F6AC2E8F8B5328AFCDFD9C1EAF8DF374368F8FFBF83ADE12EFD5F19298CF4BAB511CF41CE7F024267F42D2EDD246F64C6E6DA48F84F449485E345D
+:809B80008B64AFC2B3A2FB8BA44F68F89EBEA7A22B8A45F4B434CFCEF68E1CEF56F4349D6FEEFB8E8EFFFCFB155DCFA1FC14D28FAAFA1A5ABF92F87C5C8796EFC8FBD6767F2276ABFC893C9F89FF3CBEAF8EFCCEEC2F81F7AD2CDFCFB7C9FCDBF85FE9F19B18CF4FBBF8FBFC3CCF6DF1DE9EAFADFDDEDC3AF342529F320D2E267D6495FFDC
+:809C0000272587EA6F46F4484AB5B853F5D4D49E963E31AF39533BEFC1F128893F32F8A2A1DFFBFB664FFF9BD9CEB294FB645757124FD6FE3E1AAD1D9FB9F5284B2F33F72A496F69DB8AF685CF7F6BD526F68AA98F41F1785BFFF9FBCBE8DFD8F86948DDAEBFD5F1EBA8BFB5F34686AF95F1D48EAF81F138BA2FB7F79F8EAF81F17E7CBAE9
+:809C8000AD54AF5842F1A5277D24D5FE6725DFF6F626248FA454E37F47F7E4F6AFAAFB3BB9FF39F88B83FFFBF9A6893F1AE81AFAB5B5EFDEFEDFFDDFD6F6BDFFCFF6F4AD47EFF7FE7E5FEFFDF597DF1FBEFE3BFBAFB6FCF6DE3F84F687CF7F6B7527F38FAD9FD9F9F9DBFFFFF9CBEAFFF9F1FB5AFFE6F85B1CBF86F2DB9A7F74F85B5BEF44
+:809D0000E7F3FAFAEFE6FE7E7AEFE1F1D2D8EF47E52BEAB4F43F58100414000084148A2422412348424846C82490281358488210131812181308800849012541C811C08284002484141648410816482221241108DF7E08224440444204C4C522412208504A0040668144604440D484041844482829048C0C290841808114220848145028ED
+:809D8000A0148033248190128C24042F39096F22F41124C5F21124C3F41124A3D4C1B64AD141B24A9921AB9451AB944783AF1439242F147924D852F924484E954FA2E454F8244A16F5244AD6E5A2645DACE44DC2CA1F49C2421F4952281F49324A1F49364A1F48B24AD941B64A9921AB9453B14AB934B44A3934AB944782A9F93448984F21
+:809E0000A27497066D491B41E3F21168E7361F81522A1FC1A2161D2C2F44D9C1B2427B15F84AB15781AB145393121F82F4421436F842B51FA2E544EBA2EC55F2258AD6E4A26D554D594E216DDADE28B41F41D628F41124E3E489D61EA1616F34F81168AD941F4196BA1B41AF64AB43AD964B43A9A942AD942F81D442EB82F5F52520228824
+:809E80000400840000000000000000000000008814008400180000000080020000200825018FE80D22260194A149422231142283180AA4709468811391C3D34124C484C14CC24590212248482116E882014D8118244110A142221F42042342111228C11242100C304840F84BA300436882308184158CC6884728144078815485269245500F
+:809F0000842632C18D24288A12C2228C11D4861894888B42212412482F483214884140388A102C2D1208484972141288210D41144847DF80625E2658A19C184488411C542481264858818D161E4514AB48BCF384438F423424369C244F18548247128CC84446D22916B8183218112F468951424041D882B84552244B3C26638281184C2261
+:809F800001168C41C248148B413F43010000C028458386A928AD8100535842A281125441008886022212244C028308122490C41024180462284008002024714246088A044100CFF607008280080088000000000000000000000000000000000000000010010011400170E705211E221D1885148442218652A243C24119016D82C44A05BE56
+:80A000008218A5E58188A24C144554212E29811A1431C2C016C9B4620A118F4151848A4A230625F82421198441F44E8A4818E02B88514A1E8828828FD10723628411859414A834622952814712488E128C28B41A9414E01A58212584F8183843C8454217221E298911A1882914C8184E242F220C11E042BD4C6218506684183E619F284874
+:80A0800028B412148421026C2981D284F44ECE00200880088008000000000000000000000000000000000000000011001001140097725024002863020014122A41082084C4124041180A00004484424001800D48001224200487243048804988891462888843220400CDB13043264544D481D42861D4118F4134C129A8419601DC98A325C6
+:80A1000078D8A4483245D194936883E4444288213129493168A82E1A41291814223385141064C314E0286282231451228931581098428448562CF668FF244642014932228C314A1149E538A118848830C9394CAA811C0C31431188946400811D2849410916684C90448091840046648224608C84D8842999488C1118784284044E14226FFF
+:80A18000F60B54491204D3041504158824A2411C01412229914C6083C493A2428410C814184220A68228272182248032111502301499042C8212424122914282882284428448EF1A0C85225486441A042046280215423C220000821883028E142A21C88148128420420948880058411021C8161426440228E1C1F04214428460888028F46D
+:80A200007AE780F24428101212085422248426E841D214048651842C84043F2108221C01883220381413E15114A218A5A2482C924C21A0184021081948E34122883122004C120481502A4F5805232401003410821424210120A11248182C614280088D421054214825010018100480A8121628624100804348981100809142244860424463
+:80A28000EFBB0C23362285148655389023891684E1A211784681C1A120A1C14C739A019AE2849282511B25482368411E218391125849384222CC381683C111406418E0284218FA118885642256E42441487482088E24C5F2848E0016140221004C0428A11118001287444825022882251401002951180049042C0888901228A02849391135
+:80A30000214CC21115C412412C01004E242044188274A30D4111405418110010010000A81244228C02894498848D814C4101608242488302001564811901508260448116044D128481A91248288404819042BF610D221280428204444D222094421840082A24020070220120824422222C01008604008212314242230800311002238832D3
+:80A3800082844E198848F06F7B0041141C35818902204124021004880016416481008313628481840043444814082200C14828100847888CD8491208001002002121817307248004604421902682232916420245022460241410081810A24812212541424112512212103288003088190100290249080000888812BFD70B8E241528721101
+:80A40000A4121D14001A048422184141418688A821B08442942121452884860610A12483548122308110A12481006548848112448601224508C088405812ADE3800141218504444901108131A4283A8811A412811B12902944112D42100425381120418105204109162165A6200214441C1848021280B848028042F4CFA400288C042032D0
+:80A48000282184200480130229145442400240082C82088A642480E8110200242428842302221220020082834208480068004FDD080080240643810214190200288001478411C511011564324185041A1489810228002814811440C288901145D11808206228A6A28200001881DF460C42444C2442042800414044AA28450245222C582CF9
+:80A500002A219482224941885882242288279827181440084812214CB4121204228342148A42084082014058821A72BC054F42E21851415C52E18F511444F418144D848F2AA2628723246F22F384862F217C24B222582865794888F88C3E43586AE3F6CA421AD1283243A722CD2812345035855A9BA7814AD2A851284849C224854A12DEF6
+:80A58000A261422BA8C1C2811E888894C3D1780D1A144EB224B57832644C92224726A04580D944C18C284B344CB21563921D141CD4B542D11B92541D4CA0284E414B59482A54188828281981F2C122346829F28C381E1155E818D2874818D82252A827A88846283422622D18FFF20AD041922C1355141D228B124D12281553114E1241823E
+:80A600008051488A7D48FC45348F233A25833221ECE4860226F8424A3F8348F1D1A823F9214869022B19144B911CF53A4423E6C8D442D8C9F8B8111372184582FA88882AA12229A542818F88F4881262EFCA073024108414042112671282211220C12492A049441381124134810028989091400224A0120000A082601282144002002800A3
+:80A68000B048028B243FFA056E641F1252B96D448FA2F61D1DAFA1F22222AFC5F58787EFB848F2989C6F21F992B26D26AFA9F722622F25FFAA82EFA5F52C2CCFC8F8A8A4AFAAFA6A6AAF82D68AF83818AEE38FB9F1CAEAAF8CFE587A2F2252465F78781AF13B63BF97F67C3E8785E5FC9C1C5D1C9D32BF389A8AE5E68969A23AE12AFA5C61
+:80A700009C8F8A4A88AC95EF47F24A1EF064645FD2F62D2B7D45CFA4F61D3DAF83A222CFC4F682A7BFFCE824F4A8AC6D862F28D866F28A6E2F22D6A2F2AFAEFF7454CF1F98F8A7B45FDEEEAEFE4A48AFA4FC2848AEE285FB6A6BAF8DBF18F328284F62F2C7CD9791BF3BFEFBE94F65F17A2AE5FE3E345F4AFB98BEBF28D8AA5A6EAFA97BAA
+:80A780002ABA1AF3A8AACFC5F9E8E885D88AFC78B8E7C41FDD036E645F5256E875F5787F5F57F71B292AF25C7A5D25B7C62B66AFA9FB1692EF89F92E2EEFAFB722FA5AD2EF5AFA5C59EFD6F68C854F52FB6CCBAFA6FE2A62AF86F4BA188FBEFEBA3B2F1AFEE8EAAF85E782021F397D1BF3ABA33F1EFE3636AF85F2CE6CCFC9F9A5BC9F6848
+:80A80000FB9BB18FA15BEE2F89E922F238388F8AFAFCFCBAEB81F52A685E58CFC6F7583FF064445F52F22D2F7F57F35C7FDFD1F33B2B2F43F35C7E5BA8BF9EBA72F79EBA6D86EFC9F9BEBEEFEFBF36FB7AFAFFCBFB5D5DFFC6F4A98B5FC2FA65CDCFA6FE6A6AAFAEB4F2F5F1F2BFBFB7B2EF2FBF1AE3A2F22222BF1B7F19FBFBBBBF8EFEC0
+:80A880007476AFA7F2CC668FCBF3A5BD8FB8FA9BB89F9159EE8FABB92AB218F9A8AACFCFAFBB8F81F5A8E88FAFFF6C6CAB4C00400100410000000000000000828F4412E2440281B04802420000144001C0484048220800844008008281F0F1B2308410044712601290141188C01240245162438271115842154854814C028125229411F0A9
+:80A9000022188304001224842CC1488D12009644414803242224A02484811048B16A0C4D421F41D22EF11124C7241FC1724AF21124EF24F19124AF34B911B24A19B54A3934AF543B352F147935D852F925481CF9A54A5CF8254A16F1244A96F1255A96D5A4E549D2A6F491242DC31F49D22EF1912483F49124A7141F48B24AF18164AF1451
+:80A980009921AF3419B54A3924AF4439242BB44782A9F924488B944FA2F4FAC4508419B62CF111484D121D288D121D2CC72217C98F6251C18B245789AB3484ADA5478A2968882F447286D842E3AA45F424DA16D1A4CC212E4A86C14B9AF222DA16D8A2B481F42AC21B218B8413394A13B14AD141F46A141B212BB41789ABB443F34A1212B5
+:80AA00004A71B4983A6B418B944D1257BC400800000000008002000000100200000000004008000000220000000000121008F02473144941941736C8244114871241830884488B94524126184BC48421424C1845AD4255D84A0415084124184492221A085C2144311481B66811521C185448AD26124A414408905826F8B3E7244AB28101ED
+:80AA80002112154824F441222287286283110589511428B611BA54B2242881944220856221229746255884C1C04618C44CB12874311492C1184661821C8204214A318888298292148C4C9144FF6B4CC244472416F112281E24454114796164824D88266881479D4AD384712D8232112CE823644412635116E247348D2416722871215A85FC
+:80AB000045D84811C8C26A514818CF11747411739411E896D985E111B2A144562CCB1623A114418942061E4847214F9D0A2A311141008414682482244842000015C8A6454824CA841934483018480046041042941480492402808401224800008928982280E188042E484F91092D1250228001221224B0689121188410411211021822288A
+:80AB800000415022408852249249012A010081842440425C2811424042086064122840044FF50F193214448F41D242D2C211158531242D812542019CC13283C1782E482FBAC4415C416C162F486212E9942889312483B412C22A2C861E96224D23C952272E124923823111221A688833718441D248C22C284E2516A4A5124F82F88F291036
+:80AC0000711206AF21A2218911116121228A5312404848417852A1426213742441C4214414848400E0616283412D229022144154A31232222C51580083D812C18125423C284F24924141F26048DB2C3032401414544249C21410744368221901168193128C52A21788232191282CA4286C62442D228371247868022CA8168AB4140247225C
+:80AC8000872281181E24001889D21229044484284160432A014961828B3C7048245541444C188814141204524C924858A121850224131454488D12248C9491160410C245A4005084425048418324022602422829012C6881362C01484149057FE34F422814482203008354221B18312F41F616829011C01482C012488031241188106485F1
+:80AD00004361122B42CC91914C64828314248401202884D218E2429884902A8830A4001210F26F57A0214124118E4222278129118101400881D08404452305842222484044622300C0848223542112182810E8421152124400108134144C5422814D2ACCC228A0824FC441C2544464344F2432282F8114141334813B1425DAA4C158918950
+:80AD8000544882421481818125C2491671146243561826944425BC43685412838122D448A14322232814A242D0168194ACE42E1A83CA2E26982C122A78D201221285418401241287241229014AA148241225245172122B1449D44222E244024400211247228B289812244C0244C1502C40C12422158C284822B14219C4146044122744F09A
+:80AE00006D33243081B02291298012010042483042204483024028141A831111D1480222100840B228019E21C220133881278241244447249681088800008691D26F2D065883B1184475144274461882614810029238618423485982AC0644C0262081424242A4412E8446094902240088884E242F82119148A984094485C428428002280F
+:80AE80001648586800C20042271211804431538121008412002001140012217012C5181884214004104A04188504502C2A4804122619484424481444C445F07F6A241602418100284914068162804608250430842318849E8483946C904CC0840016898262845988048420969144429013891441829AD2008042782842F4D3BD4042084AE7
+:80AF00000228841420030024220020110C00178114134431448C214221048582128422924C2140189822244490442143C422488A0200238221F8752F4028217115321414418412518480018C44844429044121842118218344012012465141922210081448426011614004001800008812D084F56F21604641A120868484922124482AD882
+:80AF800024C424412DA2506241214813448464482816D4228812424CC98182801484042A34A8824288004283E18C928230A883E48C11394881003F8C0B4486022502C21420120210241424810111484415189881502141A1110045229222400230492D211840112CA23426026908444100824C424401AF7E0884224C149888643044150442
+:80B000001941042800C140440244271144294184280247A4812948B5441844C88268295284C314941400C014D081522818124518992481426322F2179FB044A54985F274324AF142A1F7449F14E221B684724A0843A444874785F648189127444D488F4114E83224D91262249CE19E321887224CD1E1B186A28A4C121444D8D2CAA84CF86D
+:80B0800028788F52D8A8F84E284E287082D6F8F878828D92CBC24B828F18685A4DA8784515B861022F41F28A2A4C51816F187621E2324276218561318F248A3582453212672125D32D82F88222D4D354C84DC82F4237162119F312486F121208ED44414E662F32D2283264F3B6C8D344E885942626552227B5CD48CA54C16F819232448CE8
+:80B1000011C444C5E89BE687F952BA24245C7116585A87E34D448C944449517119A5424447212D684B824C34841C516A4394478E1C7DC315761DD161D46D74267F8454A86BC48FC2F9412BB2228E9C23D229C5411E48C25D121F5B41F2A454785A91176718A664CD8F8C24C428872226D428F186442FC50A100421008426022A48C882C0F1
+:80B1800084842C68826C382124A242132234821002318A820141200221D0120822501448806422400180440485214124A1247E2C2456F27331F7D16F63F7781BFFB6F24A4A37247F53F124A51F38FC82822BDF4AE928FB8696CFEEFF62E22F27F9A2822BA8CF46F21C5CC7FAFFF8F24F4F7F75F56A692F2FFF8E8E77F96F27FEE6E66F6C4E
+:80B20000F69EB42E22EEAAAD2AAFAAFEAE8CFE844F6DF6C6A48FEBF92A288F83F32A2A2B117FA1F95BD8C59C94CF42F214954F4FFF1C98CFC6A413CF55F437652447643F75F51F1FEFE2F37A7FFFF2D233F262226F41F114959ED6AFA4F412344F44F984B2CD1E6F66F764E37F77F9A6866BA8EF52F23D3DDFFAF1C7657F54FC5757EFF6E3
+:80B28000FE6762A5FA932FEFF7FEE6E26F6CFE96BC2AF2A2EAAF82F2ABEB7F4EE84FF8BCAEBFDFFBB5B64FE2F2181E8FA1F1323A65FFCAE84FC8F85ED8CF4EFA159C8F9FFF1C9CE5EC86B6CEFD29D9244F65F13276AF23F332322F67F16B2CAFA4F671335F77F5E765AFE34FE225F7D616EFA5FD2626EFE5F58723EFED53E463F26F6CDFC3
+:80B30000C3F7A5D77F54F647C65F77F736376F97F72E2E7FDFF55ADD6F6AFAC6E26FC9E926F6A2E68FAAFAA62FE75E8F4FFBACAEEF6EF2AB3DCFCAEAEFFBA2A8AF2CDBA7F84FCCCF82F36CD88B664FC1F9ECEC49FAE2ECBADBCCE392437256F61256EF43F33A365E549FC2D2ABF2783E7E523F5EF63AFA8FACBC14F1D416EFA7FDAAAEEFB8
+:80B38000E5F58E2BFFFDF3868E6BCECF94F45D5D9F7AFCCFEFFF94F43D3FEFFBF35F7BAFABFBF77FEFC5FDAAA66F6CFE96B46E66AF4AB8AAFAE527DFCAF2F8BC8FEAFAEFBFFFEEFFE6EE2FADFBE2BA8FAC5FF7FF4EFCB6B4EFC7BFE8FA149CCFCEDECCF8B49C4FAFFDAC8D9DD190129016844B125014501400400280C4244881828D24C046
+:80B40000241189125148118D244901224261422290848440B8246881434248628124845416C8244820180889021EBB002002A503244418D0120121A0141229312121482111004614223122D022014B527022485424702C024F1468414244A503830442800121490414444180F4BB8FC0421F4152281F41324A1F41764AD2C1B64AD141F2C6
+:80B480004A921D68AB9459F44A924782AF347925F84293478B2D915F8AC4914FA2C4816FA264117FA264192FA264594D5A9E242E5A1F49C2421F49D23AF19124AF14F99124E3F48124AF14D141F24A9319F64A9153F84A9143BA4AB9A4F44294478229F934484E944FAAD4A30A26BA11D62CF41124811F4116DA41B44CF18144AF42B9815E
+:80B50000D648BA81B44A3BA48F1429EA1478A44871A658184B1A144F82ED117A2428C9CA8F49C2CB4CE2A25CC1ACFC8164811D648B841F49324A1992988E24AF4429B84A3B84A933A4A9618A2933342B842F8A8479B4FA36E360888248000000004400000080040000000000001840080000000000000048000040018F7407441341711A39
+:80B5800005124CA242478189E211568224194184522111150C3217828C8124468441381A63314248701422522424C503316E86862752382800884260C426881142744254844C39442FEC4D22748422011508C88448218C58214890422531422044481904A441244D4A00844B1283A24188152624024B12281110054B18312283145482243F
+:80B60000CA2142984119018D41287FEA022564F816C15D1130248445085B213538621721463422195412DC1478217228417818A24286F644188485C21846B44182D52498292D444E22158E92212EC127483952812DA645018B82431442B84289116824455248C71962FF5F0B4812241028218CE624C1288B844002101102008911848144FF
+:80B680000450221245A22184804144026041214414442001284210984489221252141B142014D4FA0500800228100110020000002184100400002440024004000000860400008008000021411004484F63098002250415022481C018C0189018285681822C6219481241D0A48621820118A01221121243012902112120018A0481808182C3
+:80B70000442451286084437824F88F330040C224C021211121100A00001981B2424818210444209612301220014B2100184C418202172800004A080020224482518450844CC8486FC20820020000400812608160812848002292441200C18002100210220100004100180030888001400424800426F49E46000044418CC24144800400135E
+:80B780000800118810210400212820810141818200000080088800004004200112108402CFA8021460313012000000424002C44121008100800446422882022012642460222864441200000080088C08E0883448A0818481CF880300100825811108001800309200200110080084004821382112200244818002000088000000414449063F
+:80B8000042F0D6551001508627419C6215850448800186012F480111821885810400214608324A134222822904205268800180088008884184004DC887444C1404E0E50C001C01240000004800218464000010084280528200B02411180423821206412888000000008220011228928B24841FFC0D0000000000000000000000000000006C
+:80B880000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000058
+:80B900000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000069
+:80B9800000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000E9
+:80BA0000000000000000000000000000000000000000000000000000000000FFE40F00800100000000000000000000000000000000400181000000000000008200F0B5C800004004100880024008890100C0481243042284002001402282043011000080020000004412204408001FE30F290280024216043082800C82100282268E150422
+:80BA8000403144118410048C220200230244221881111800348904000084450800847024020080420441812480820884301A00008C24314460420040040024222C840212201118812102304800004412414008009F6D0D230200808401200848200800828D261A44041021548181001889220200004581020000400300004018880410089D
+:80BB00002F670B108141180200002160140011290880541884106144A490412002008002444014088D1113112208110000201202008304DF340665C224A51204284184411A8831D881834864C8514E2985D42838145199111448911C4146187C41C8228332844C48C5217494302141C0898715608B181D1A49CC16B04451488146242152FA
+:80BB800048AF170141105824804244088602828008131821048297414481444100C0484C22241262484C12C521514548186151136118142001348664214012044418818574E704213D2423110A00408481315887148141E449D881123C4821941C41C1489467815C04818501260888400431804208A18B58F08128188C8114044B52818486
+:80BC000042A042E0CC0A125234006415260114404A548416881268411440382420684949288283514818460150411845C84812282A010041121D92648904281A24018824429289F8D4C3406A444009000041426062861184240800649018A04188318002244581C288100848602482004641084024B24801008A011042046783341906F01E
+:80BC80002412A411811424800181008081229118404814048424434408116044209662804801417024020020880816181208384048081FA70933D64201354A1A143A1350144A5128A4591828C418360400265C4849684C44146B1281811C3142288147344A41840824430341001234608C83A4215283818908818668A87FE7051840E141CF
+:80BD000002114501240000844C2182081C618185041800A428481A12044146848822028113212608282714C420C98228188421003280C414F05C9DC04628242880028C010084008362822046280A26044DC880111134181004896182008C1148941CE02401220014A5A44818800142188B818C149848BFBF0C2200142246981C549C7198F6
+:80BD8000A5812B21C02114128018446A185843011528021EA82829C2524A18D412D441895442207443C22141367442221818E22412482804968A614C424120F8EC35144004100480C2244008400441408419440400304820141C8814088014040060242608188142003823861882282204181244CF2B0A148041447818C412002A09854491
+:80BE0000186812149C424201001B24288A96149892002541511244008032332841444038212120082034C841821822828A22F815133082154414084C1488052D44A04228497488D484449141414840488448841204E0210422100180022A881802212829451802218C082181189084407A1471CA0648904A0090242200841088025048827C
+:80BE800085220846841851181D484820618815C88C8118111C08180017828531484A18A114A01400102804104804F013C44084C4212412271150941518281301190900830130129812418221893A2222413E82F09241212C894501AC7118044800289088888A42420829110421800C1F3F0624A451A354820080018848888120048188CC2E
+:80BF0000C48480C44841D0C1248428488444C4484C44441448048744201E8801CA01184A51844945044490181821AEBEC01180444404804484064445C26245421354343C026882211C825314888514D4144218C4414911D28199122A14A342181352484018410C2820284AE248046C210884DF9845E14475C43417253E1E71897223953470
+:80BF800067118E2A2E28248D418F42C241E5DDCCF1128BCB488A78449481815D814B2746B298FB1C182EC27F76D4266CC14F24A1C44F25B4122252186F24F7594583249B68BE292CF498C28AC1486A9D464ED887482B11484B8C47498F3858C25F870B43722142B32C44E483D144C11895F928C88B819B41811125C92411195A482C9A350B
+:80C000009EA86E541F54E2E8D291E41265442E2445DC8861542F28544847311D1184843E1287CB67A21D45AD66C6B243714858824E482D1284878C2368844A6C49188F84A94283EC5845523125D8484261828F446481CB6516E44C8321E4C2F8449C5D82D78522CE435B2827C427445843F1A4C88B428D14D5FC244882BB29928F88B24CEA
+:80C08000F133491F48E148D845F118227F484681F2243A47843658281C41C1A69A38182CF818246F2179A4B444713A0E1E184B81CF7C031A021A12843246304630463042E04421E84421EA44312118222008244654218008882880428102800829012190823022102218220222A042A042812F560C7E431AE3E1F128288F23F53F572F4540
+:80C10000F4652FBFB1D4EEBD5E7D53F18AD6CF68FC52536FDFFA82D32B42DFA5F338FA8F82A81D7AF32163FF16563867312FA1B228F26A64AF61F5226AABBBAF41F3B9B63B2315D722F225671F32F231239F14F2E6BEAF28FB31B39F97FF7AF2AFEBF8C89A8B144F26FAEAC2AFAFBFE6EB27FBD6148F8EFAB4BC4F6EE65A45F17146AFE4BC
+:80C18000F6272E6FC3736EF83D5DCF25F56F2FF794CFCAEF477F53F1EAB6CF61F55A56EFCFFAE3BFEFDBF51C7F8FABFF288A2BBF5AF127377FA6F64EDC5F46F264EE4FC3F3EAEEAFE3D7F6F89E962F65F3BEBF2BFB1FB4F42A2AFFF3F7DBB93F73F26B22CF8EBB2AF37BEBFFF7BFF8FFBAACAFACF94A32EF8EFAE8CAEFE9B9C6ED23FBF67D
+:80C2000038CE88CFEDFDFAEAAE65F044734D462E2EDFD2F2193DDF55F3541E3FD1F539355F56FAD99F1FB3E628FBDC9E6FADD9D7F52F236F6DF9FF9A8EEA8F89BFD2A57BDFDCFBA9ABEFD2FA14414F63F6A828AFEFF73BF2AFB1FD9AC62F47F451FE7F65FD3777EFE3F3A7A75FC6F667699FB3F6A4BCABFE3F1BF3D156DAB9DABECAF91885
+:80C2800092EF8EF898BAAFA8F886844D166F4AFE86944FCDFDAC9E7F8A47F34772ED467FE1F1171DFD2FFF55F33C7CDFB3F71E1F7F5FFBB9FB9FB3F684B24764EFE8FC2F7DF5FFCF8FFFFAFC8CEAAF89BFF6EE29FD6DAF3F9AFA7C6D5FF7F3F67A4F8BF3FAFEFFEBF7FEFEAF6DFC62463FBDFB5756FF32F63E3EFFFFFAFFFEDFF2F6796D81
+:80C30000EFCEFB68729FBFF6D95CAF8DF9DCE28F2CB9E8FCEC8AAF8DFF9C9E6F4FF77476EF897C8CFCBCAECFEEFDDBBD100425415824E022012623490240081548042008128314A1242144218D24318B246B128163024B929014842941581484881A44E181041A0496C824484CA2494C221128F89BD2202811241144182C1144A882840060
+:80C380005C185158518160444044D84828625584B02141842804421430241584C844A0682A180180490849D4280198102892884712C77CE032F41124C7221F41326E1F41324E1D24EB141D24AB941B21AB9453F14A9443F34AB553F342B557832DB15F82C4B14FA2E414F8254A16F5244A96E1A26459ACE449C24A1F49C2431F4952281FD7
+:80C40000497248F29124A7241F49F24A121D2CAF249921AF3419F54A9243B24A39242B9447822B944F82B448F9244A7502BCD541941C48ED1112E5F11124E582D278E949D23833118D36128D97126C7114989869D412F1245A1CE1A268514FA26C152E4A16E5B244E4827D91FC22489E44A5F2116487261748AF24F19124A724CCF24A16F7
+:80C480004CF24AB251AF241BB44A1BF442B245885B86ADB44D125F7D0F8480040000000080020000001002188008000041008488000000004004280000000021F03CD224400495041E4441644CB592469848188A4424A14158150440094784190800448303484E8C8426022081A8818E12621220981823318810181814A841288152C12CBB
+:80C50000F855BA20318341901E911FA28133291480014483E4C8441424C81C62C0240021224531481164446041202588E24144088C41A2C2122998481AB48821E441A4349A242201856412F07DD7142D1257844485361856C43469D141F28221450830444F84B28481B544C181496124949048248A2142849418443354488130524628A2D3
+:80C5800081830926C8128AC682C97112E84A351842C14483A521403814478229D85A0B00101154818581B24AA141E0818421088C4404448428C024411C08105148130241C249810282184420B94201208188142818A8414A232824038C04F0A14100100C411100419082848840844414411101004146342444137248850824824084081407
+:80C60000281811102102A0412001400229A148201208BF130F25042A31111C042D458B128F3144091391422398C11419E424C1688D14174226B4C9611284D018049011578489C1485248296112B8541942C8318344E212F488221415588625A248848B3483321428414449FAF1F4100281204422049F644109184622B84568145364344230
+:80C680005D182611C488224528D28494218114942CB1482805181922922438113213041982181158C22442F0224A818E1410446C485F660941E0423111454151413608248815988200001217824084E2141125444401174492431408D02424081E8114148414812C82942823456121201828A11242282220E2DA042D4810880422007042FB
+:80C70000140244A51284D884F442228A1162A2415D58814914E42802241046014249244408481612A868416022D084118818882182C1841216BA484848F464BE148444D012840418411D28141608C42A15D8828201198443230400308543223A4414762112D881D2421212A442460418004A28189422121228C4238401864604F04B54204F
+:80C7800062221514941241156881005081C084190100818100E04402814242400800410032811181184126D81A0400120088524480082004CD2600282415A614C018811153144201CE1643B182C24CF081582B21178243B419D44806441B2443224A428502CC7441842252842671484448846214248812A321C118A262189890884E8C4024
+:80C80000B6CA0F2B4244E501C0241416742802894158288C5218842CA142218400446044844429046D48808502286D4212002C21A196C4A18A0684A02820D168914444924C0183043FDC094140551424104224113211A4181427414312981247111831202844AA422C116C8490494A1168212001004E112551288054181414C18C8C840288
+:80C880002A946840988882D0240B0084A121001C413181C3228812041110044142848484148400905C40285185682A141184312820010018E026181128248CA18142183828F025243014100400404228112257488912081B8181852241827C5851620014181816824112281481810180210186129814200881281800C0288400814FC70EA7
+:80C90000315B14A024B1280060441009822810420113081681024845628222142A4848012248880000422744518018420440148801004C2825C1228FD7028A62431100902843E4451225040023B14881081410041C081018044904521248244012488211410148830152148400880080080025F1452D4008324004411200110012008129A7
+:80C98000420415084114114870440340811412182102114078125221844D429304302148822212622881908828389F7D0B40C24A816042800280B3223812284E8411411200D80084C1008908135422850411125411282018AC122012143122A028460226028B4816022281F09459800100002744006A112211981240884114425486C38408
+:80CA00007141C244472249B1213814008021440212004248942C444402821EC10081C880012A0998248E3D4019A141439221009024502815045912B8641805982880181284032E8818110029488108178490511C0881431444222C6844803218822604442024544A84BFA74B039E239D182362222E22238451249E432F4462A96D128D1208
+:80CA8000848F2452A1816B11242D51F088484D424D242F64F62B14B967144F24D49AF45218811D482F16541385011A1159C84E722D462CC4195AA148CCA4489052DA092A812EDC8851D82AF2DDBB30154D442C72445CC30045C32D574415FA222189721474427481D854F82611116B83C3F4C6414B82D484835284AE87C11E111285E5818D
+:80CB0000D51C3911AE329011822CC45215394CCD38BF485813F0A9A18F84A8D48F8AA2422B655ECC85B814A86DB662213F87095C931147518D231444CD245E247A81F338119B9416D811B83CF924558B1916C48D5CD1C1D888F9111393F44B4145A82147811F41B588F241122C1CE224025E441B114D2311FE193715E7411C7842F444429D
+:80CB8000883DA14E1214C782884C22B28882D18AA382B885B87D4A02400800702481B42488446288448A04840081A24222441146044411861462482186641244144C82C824800228349A0210328429B214143294A1413014F0A8E1242B221F36F22B23BD4E55F42626AF84F4212117523DC37D922F22FA2B9D75F747414F44DC88F8A7A384
+:80CC0000A5F82C2A7FB5F4A5ADCF4A7A2EFE462BA67A32EA24BC9BF88CC27FB8E8ACF416866D8AFD52AE826F51F224227BEA8B24FF52F663276F46F2121E5FEAF2327237189FBF59EC8BFD8F62FA92966F68FCD6C8CFE2F23674CF47FFB498E7422FCF064F63B352F41C12BFF252136F62F24A4C5F55F531117F73D9EAF97A7A3F12F3972D
+:80CC800093FFD1D38CF814923F7ADB73F1A2B63F91F5C78D9F1DFD34172D27CD9A67E3CFF5FD1A15CF25F5979B6FFDF416866FA6FEB7BA5F65F6776C55D217D598F73775FFF5714CFC7E3E7FE6F222651F38F8FBFFC7E4CF65F5AAA62F4CF8E4E4CF8FEEAAFAB2F8EF4EFEBCA8AF83F3B8F9143E244F63F63A33FFF2D277D266F24E485B0E
+:80CD0000331F6676C7F7DA7E9F32FA1BBB65F6DBDD8BF78F88F8B7A33F315126EF8FFE179D5D85DFA6D577F226862F23F16E6BF7958FE1F58212EDD58F25F5AA363FA2F7E6C73F11F611163B994F47F45161E57D44F47C7E7FE4FC93D63F1ABAD99BC2CF6DB9E2BA94BD24F7F896AF8EA846EF8FFFB8BC8FA2F16241243F63F316444F23E4
+:80CD8000F32F2F3D236D26AFC4F465741F26F7E766AFADF5EBE3BFB9FB8A9EFFDEFD7CB4CFF9F9BFAFFFF1F18F9FFF1BFB55D51F1FFF685FED2FEFA3F23616EFFEF65A1D9FFDFDD35BAF81FC5C5EAFEEF7B3B23F35F63F641F63F3D391CFFFFC5B69FFD2F64C4CCFE5F5B7BE3F19FDA1A3FF9DFF46C48F85E9AFFBD6F26B768FEFBB7AF1D2
+:80CE0000F4DCCF8EEFEBFB2832D7F810041C012302A041204122011648210812441351489242001098114C123148188314021C0114C01150144800204801400812801408005FE70E47181054812641140445112146D818588489389585518130819044145538484189028384411102182848122068341618082344FC421148428442A034D9
+:80CE800012892A8309382679EF072CF4112485F2112C83F4112CE7241D24EF14D1C1F24A9219B24A5985AF643924AF147924F8429147822F14F924481CF9254A4E855FA264515FA264592E4A9E252D4A9E242FA2F491243CF4912485F3912483F49124A3F48124AF34F91124AF149921AB9451AF143934ABB44B4BAB94478229F9344898F5
+:80CF00004FA2F45439F0224A1F417422F2114CC7241F81726E42F86C131D4CAF64D941E2245385AF6411E4347B84F84A3343F242112F82D452F9245A4E956FA268456F827C98D486E459D296E449D2A67491DC86E449964E1F41324E1F49324A1F41F24E929AF248861F41F24AB243F94A2643D16AB8B4F44A8643F242946F8BD442F8248F
+:80CF80005AAFAD0A000028000000180000000000001800000000002608001004000044008400000000F07616604100702244FA1528209481A962811CC4486B48A22A041C1188222464246044CD220050626292638423855128100A11842301A8421588148104B0280836044901FEA18072A45148004B429058224382018CC19483D184B1C9
+:80D000008C61C14312C45447912295C4418332414662428984C694301820581243E111A238808562828E421A94884A389160291AA821E028812C6E14CCF2C8F56041461548C22483F211241848471A6781837168D128945C4CB86818D814117864D21C05876514478ED12C048C34621D44301A8B121E4246417812628230418CE28142323E
+:80D080007489F468811311813482188C4AE262A824128F41F26CBB20821204C044A18C2402228031948836C81443811284014A1221044A12C22440B422299944802891141982091810A2488882A04820892102924A216844F05946200218901C4422151414411261140012888028D118130400240044200144221004207124410820E481A6
+:80D10000021B41814003242AD44822039246046F8B0716062555A480324422562825233118C9C184895449D15B4294A024481C72440A1E4916C41276714188518216A812882352C28A82D126624963062B481314223483E08184921C82428B92488648F86FEE400431818564424916654142221C31484182811C18DD144C391828601245D0
+:80D1800058224649440484188082022125845861830200C81934128C3482305A7012B8288895284882F091A8A0122143512412002883C4112C011C9118411A54488082611246840442808121F132414E112485C41818498842282343E641D842867432081C04141480B2444224822969C484EBAA40A8124084443452413A44C198246483C6
+:80D200008244814431824E2C1224388A81C48890248480084C0120250148008C4822248466846CA41284484B8400448F41C8682A14F81A2450822195A443818414A30281118D214CB124096112840045C248414A4192842A05A2463C228311A11A1C2362E2F022489014103189448C014CB88884F42482106118D0220412281D93E01211E4
+:80D280000430121C1228416841281894141228E041220222400989824234481230144362824442008420052880023011001216889211A50100C444CF7B0D382F4211C83423C4252795C98344A9388D31A571162184A2418B2182842E147024098722812A352C26688423DA84F224182A91213A841228024391A8113B2C4CA46184B08AB12C
+:80D3000048A1D22BC22C414874DAA4242E58C1EF6F0A25014501894148028B121654188061882C11055129B224048C84A14842434284241964411890845260412542A814001008811B414A8A044548048800844422AF980E4114459848C1224931285B123218001004C541F81441841C110180064219644140041840440291830444241693
+:80D380002442042315C8481044B81804412004445F83074A02114022440185328185A124184C3428150A2830254542286282418C2441088484448D444200114054222C041018B122010023140822412418845882FFE50EC024494104448118448420240432C1444461101424150410244828218181420800A04318388181A02881225012E3
+:80D400008CB2C2216181420018006FFB0100C0214C72182131442846144414288424A21200800421488C7122C4C84C021DC4842842448981288114E344084664221E448128215210D1282214961290448012F842F4A02800001422841004200241415084C048218534241E488081021088048C01000084222848233418181068C3000048BF
+:80D480004082288814B8C14F429428D0480212001041490812800128811038622125841185C8480018C0211800134199148C542A1838302131184219032064488501120049F43415C04900141301109211202192D2288034121C214B8408A1B044418888010000811812C0521082B1880228004C0489220100E0830481C082BF13094041C8
+:80D5000008897224C82813022800C180A1128230482800183902A2181A084644B42815464424813214224C416442466C644C042A4822189854412258491484A481F09756C019442A041400100842C410944A4826882122E48201E90C8C21E54298228C3122C081141929C268801C81021210024E1885042C22022D180080241102AFCE0BFD
+:80D580006E355F185288C13E232E598782D3C21C8F4FD2D11138584B14521F6221D248F2346C4416782BFC386845D488E6877554D488487428B918F4342A8F42D288A1311AD512C2893E46BAA251FE282E622FA164123377A278149A419D182DAA2B442FE28AE182A4118CA455483F1D429241874254174230184B2121261304484C0DA9F9
+:80D6000031142D94479189D881524649D424B158624487482AB4D121F152444D1419B414E44558C4A21B111A519CAF44F12E24AD5446EC44D165C12A8189C51223F214448D18C3C448474449A81522826F96064130349C56CD5D241CE184B31D521183E5867222C8444FC2F64868DF81E222B141B16CD4290F4E843F8254244D218CF32299
+:80D68000648D18434888E984511400502D3B344D422445B21EB12C92E889A17562A798688B1416A45156C4122F44948888CD8E3F4844214121013042704201698894820084001412540040416214241460181882200C821882188224100488482C08888028C18211880022B0EE0E7E651FD3F119151F52F459728F23B714F22C223F24F655
+:80D70000E173DB186E22AFCDFD585A2FA5F76F7EAF9A59151F1CF97837EFBE3C218F9AFC24273F16F4697D2B47AFF7FEE9EDF5FD25A98FC6FEB8FEEFD9F5B4B4DAEF8E7B88EC4AFA8686EFE5F1EEEC2F63F37E5A6D648F86B2A2F3FADC2DC2AFA5FFDED4CFACF96E32EFA5F5E7E4CD4CEAFEA8B84F4AEE4245F272641FD656591F53F56936
+:80D7800067CF62F7746AEF27F73632DFFEF781156E62AF8BFD585EAFE7F76F7EAF1B0B4F4DF97C7FEFDEFC6D44CFF8FE647B7F36F466E8FF97F67A2F9FDFFF9E94CFC7FF79EDFEB667CD8FC3A3751BFB8FC9F1387CE7A16F6DFB662E6F66F17E5EFFDBFF8CAC8F8FF3F8FCADCABFB4FC5E5EEFADF9BEB26F2DF9FABCCFE4B442F5C8D96F9D
+:80D800004FFB6445343B764B6285F9212D5F93B777F32927BF56F6787D3F56FE59572F8FFB58784F65F54E4AFF82F7A8BBEFA2B1CAFD7D76FFCF7F2FF8BC991F86F7296AEFC6FE7C7ADFE7F65D5CEFCCFC343C8F9FF7FC3EEFC5F9343C5E722F2BB71AF811154F45F17E2EEFEBFA3636EFE5F5CDED9F77E327FBD8789F1CF45852EF65F53D
+:80D88000D6944F4FFB787B7F62F2D6D4AF8DAC98CFEAEDAB4DF36335CF42F61C19DFD7F3296DFF46F3292D9F72F23F39FFD6FE595BAF8FFF58784F65F57E5AFF87F7BCBFFFF3F3FEFC9FE7F7FFF8DFC6F498B95FE6F6676C5F96F67C7ADFE7F7DDDCFFD4F47D7D8F9FF6D43E6FC5F9243CDEF23F3BF31A999FD5F1DE8E6F6FFB5E5E6F652B
+:80D90000F75E5EDFD7F75836AF25FBDE7ABF3CD4BBF49EDEEFE5F53E762F27F33E3E6F4DFD7A78EEF3CFEE79EA01411004418C84C1480000E0814406401828112841048504449028202422048001225032008420486188A048148E48248608822001825FAE038211C0284304460189419418901812811A441484216144124E214548814466
+:80D98000D18525817418051644480419C212C42A6141C064C38694928A622484984198AA44944429098849F47E59C0421F4152381F417248F21124A7241D24EF24D141F26A9219B24A19B54A7925F84A9153F3429157822D954F82C4914FA2E414F8264A16F1264A96F1224A96C55ADE24ACF491242CF491248D121F49F248121F49324EB0
+:80DA00001F48B24AD141B24A9921AB9451AB9443F34AB243B242792498924F8284F9244A8FD40B3CC44C87324C76487111344C44CF14018F52D941F648B251ABB45788AF2431B52D2217882D14678A1CD184E514D88469112EC896E5A2E458C259DE252E4A1FCD42FA8164AD121F48C2121FC9724CB28132481D24AD9619F648A6518F24C2
+:80DA80003B348F243B248B844782B95B86A9D984F5BF19302280040000000080020000008821008008000014008400000080020000000000001470CB4A0241181504837112088524384A8E311602457A1438E8502443C824684392444A023041E3E18128B128212506C8182A89D8481994C8814E8892802421E188E4219244839A28842235
+:80DB0000281A82F4CECD4021487118C229637244514A56128452228D415B481448544B412283B21824688584304247228D242C6214222304832118312484161A2102494482C24212602824402A1124BC4841D418449CF62460441285D582B22471441866C44D8245825A82614912E85618447482D42484B218321C2C240C993636871C16AB
+:80DB8000E28384D418928846E145321889311C2284904828430422888A8433481A08812E4226649187459F15021440214143D81241C812306813E114B18154384B41811A84628289A348468484024C121698122820810588A082822D81444AC84C2C2849A2411812A5022566828D248A9418A024F0E52920C2246144008002482642088453
+:80DC000040882282082061441008818C01414A9212420000000049C1444260221A044002884138304800D09604154421127A3E32482E844412218DC10018812F55D21484742C314887544E2483C2242B864222441F4522412182229742228023A921CE222CE221883298C082888E18111E66478129C448A2A29E48844CD8CB0E4992212964
+:80DC800042342C81430880E48442088C4132751524E6820899A4436822298284921446256114328027840200322216E44439228C09822100412D18486880E28108B0370B144444A5622148224C2211621821008184685041461814548441830C8181384122216824008083094E82282148C02258888B18142B2549584283A128838C14C817
+:80DD000084BFFB0E46C8112D2A8C449414003862100248848229041F81882121449812225C88044448848160C119850919818401801408848444B048811C048C88840144A9DADF0B4781444148D0180218100422442B12A021B024014A02211981118828013608108121046081812A3448138286A1610013C224290523E288C4242A81C2CE
+:80DD8000848242219FB407280080455284914082410841141548583244448482414A022932212B2424004B2542002A4484981290188A0120C111420000201564812200F0492E40D425C124A1481655821C21F34422122942224468AB422697812812428D142810A64168C3314284C924D44824A12C3088290328F84AB11826419929A041EA
+:80DE00004E1AA8C24B34478889238A18C4A8EEE5A052100849C12841840040084341115128128D144B41818214488932211C128202A0121218138461411C018B1417810000184824288054488083C4142044D18903244904428428400C00008442122816C9453024004B122881411256140123011268182820049A848104800419011B144C
+:80DE80001A12042AA1828BA445483A24BFAE0B1A2411286124184CA2142C6448806421431448614410B841031485914124148111008181818922C129D01855420046C9281908DCC1A8601C00842E1883041882AA21F8FCBCC014140010442C3118263118228418302115381C90442422404911B5411141120880241441011681012612010C
+:80DF00008B142200812884C0142410082904945F550425083048498224820280044880D148048A64819C41B1888401582B4222CB49803C1129240180ED418424A2940012A0141988210E114921048C981126881182B13A0A8200401845384849E2448114413848498882094C09884888422A0812211242992225010044844341280883082D
+:80DF800080223844880032A80042A820746F0F420044161228C12112004E141021018144429064442C6442A0424908491481444891248426C86828460842892614420246222914C22200622A180226A8821FD90540A24100124221482618148A1A4442444583824A4801402888880281402342E8140121242642010019048483121101843B
+:80E000008489010000B0D10C498281022A11C81290281281321818000022442984230148442242222218001084042A440281229018A04812858401842282828440C841818F410584269C589B124C840241414218444882C332888002811210228881A18425042180488198228412C88413850222A034184C04288B1C414890111981C9547E
+:80E080002B18247F764EC2544FF94328F1283643E48481D48476A4F1144883A14185E8C1B247524866ECC4C51D5F44928D11874C288F5CF1454417416485C818258A65621F42B621E246E312F814481B182A2C24E21128B2D9AC332F4C28B953912CE5A4A8DE711BA8A351848F9B926A6A033248811B6412BB111E267D288F67715834487A
+:80E100001993884749896C1219FB1C81ABA1DBE12F82A8638BC11CB221BC2782F2CC5149B342C442899128988F15A14DCB41997262A2458291CE688C21D45261841B711DC1C83E18621608814EF82BCA1CC91ACB793044213AD1C8F144482E2CC3F278148087B162E4A6B141951487C94D49193125625827142CB12565A4488F2331225ADD
+:80E1800074A17139B1512CF14828C013E0A1D148531A4E3A2E7989B14BA4718CB2885C9C428549E481F728128F82E88321FA581442AE843FCC4E02002018861402690829485842822117882182149214864861A814A414A48220282208823081100111881110010092002011088141F025CF342B67AC52AAFFF3F45A665F57763A5CFFAFDA
+:80E20000C6F726A2AFA8F8C3C32D5C7F74FC1E3AFFE1FA5E51DF34B743F47D7BF7845F53B379F75DC775F66D7BDF11F27E332F38FAB8BB8F1DFDEA6AAF81F818B22BE93E632BA54F41D811F6D9C99F1EFFC9D99D6BBF9FF7D193FF9DF969ABBFD1D821F942513E32EF8717E895F4981B2F21F13C349AFDF6CF8BB3147E662F457318FA2FD6
+:80E2800057EFC6F663776FE6F26D2FCFC5F72EAEEFC8F8D9D98F87F54FD3EFC4F75CECCFC5F5E5F3BF16F6ADEB7716DFDFFB7973FD85F5FDBFFBEF33B77CF74264AFB7F7FAF39FBAF35AC88F25FF9EEDBEE22F11FF2C8D9B8A9F94B4E9FFC9D99FA3F3FB791F29F9C3DD9FA4F96BF94E522B744F23F37E588F8AB9D9FD383B2F81F1BE140C
+:80E30000BE58EEDA8FB54EF174644D66AFA1713FBF3EF27F6D4FE5D4FDF16C3ECFCBF37AFC9F94E5ACFF45D5AFC8F93CACCF6BDB5BF2C1CCDFB7F7FAC87F53E38DFC45D5AF88F867C14D4B5F52F61B792F33F7D851AF34FC3A389E3A2F81F291C26F517788D94DF2D9C99B9D1F97F7D1F2BF99F1591ABFDDF969BBBF95F3C89AAF8DF53CF2
+:80E380003AEF87F7A8388F87E6A3B172F7FAF84FC9EDA4F58D51342F23F6167487A1FFF7F17EEE5F17F7766CFFD7F7787ECF8AF26ABEBF95F5D8FA9FD4FDEEDE7FC7FEFCFF7FDEFFEDEDDFBFBEF7FCFDFD1FADFC65C51F2CFC3DCB2E486F52F6183FFEF3BFBFF748CBAF87E7ADF5E7AC7E627F51F3A92BCF4AFA59498BDD9F95F5F8F2BF5E
+:80E400009DF5181ABF1FFF69FABF94DFA9F97AD14F23F37E688F8AFBD8F88F22F172788F83F5B4CC6E6BA72CA012008441001241844008404448844404002880024440941100B02421E412012200A08248E08824C248E081440140982812288228F03EA6904412242889A1418144A041421242168828E8546288188648A44198438A8204A3
+:80E480004B1214581AC21812841014C11284188C344812881288821882701488628120081E488148B7A8D022F41124A5F31124C7241F41724AD241F24E121D24AF349921AF245985AF64B925F44A9357822F147935D81AF925488D915FA2D418F8274A8F15F2264A87192FA264592D4ADE24ACF491242CF4912485F2912487241F49324A6C
+:80E500001F48B24AD141B24A9921AB9453B14AB924F44A924B43AB944F82949A4F82C4944FA2F417F5D092F41164E5B311764C3311A543D43E01AF7441F4423384AF74BB35F44A9255D8227915988839F44A941F22D548D9273C186F227818F1224256F522491E2525F8112C2D481F45D22EF41124872617498F24F18124AF265141AF6452
+:80E58000D941F248B25B218D1243D22A3134A53224A9B122D442E982F5AFF3008248000000000028000000002180011908000000188480040000004004280000000014E0D401421443411408832361D21A689816381844C3318400448A024664428A022992246442284D7800244870117411164492288F242A2114381870828281B854E22D
+:80E600002A04C0188118438274310216652A222474413028C024382D22344A681883711884321841C3A61220648446843118498101AD424E2C8B2119218502AC121811025FA10A2D822E5842821C0499A1348B49112A3941871187224D599044133A244D42814128831245F4358A8C322A4CB41C981C4981C21C4CEA22B45482A285842793
+:80E680004A43D2680118833649A992383B144A713458248B42257822A88429615A81AB1887222E44888A94241F85A852CE18182E925661115E2A6F5D0D1C0129014503892131289A02123C21482118080085044422424812604522161462440010C1114410312AF0481240A2412C2841A1412C024019088D24F02DAC80014100A012008007
+:80E7000001290818924C08AD2260442200004E2141802194148308282A082215084001221281820083044C088D84124018088F88044C522716D18642046489F426526A8182211548944428A149C42C224909854444C41412CC289228826AF128125694541812C0781E69389C541884822E49189C24A141A3B31C8C834888A14283E623069C
+:80E78000641118A1001E24A0251A04121A18C814444948A842C9A224445084004C2521084212E81869B4A424214118E88184021598183048109818C02884CC8A08184A6282FF1D06324465C12444002D4A642238304200D82225526840A49200444126115448388932848991281A820128117819C2111D48223088132A6114425269E94178
+:80E800002C2141484888F4C771248418608260425012182602467888A48249048B18118228822CD441412302800A28302270848181E1C1928848E028A23425419C1415542138813088A021800292904EAF4B018444803448402182C2448042F4261220022D2424248C921822A11887483608B018242281442164448490494221863848002F
+:80E880004400A2E022242984018951848C13F218FD000010025A1208218C010018251824011200420010043548848144180823021B2118164414A412008328014694184008200520047F7F082141C02A42282A94211A726432188322D824B14421F284182752822A91224A11458352841250815E242229C248862C6447223698195282ECC7
+:80E900009A58C11634881429E1C864812E48278128A0128971189438C3B4490B20011048C41384240048852248420812249088844A4308D048622240288105201162411C0845C2242B1419024021010082881A8481048242F034270043024322840246225484422824122B142678C294144285648428188584528421381222291102A01A79
+:80E9800020890100168C018841320010A8120012A08440F839FDC0421824808294280010AC414E1820D24105224538415B8316140182224824A414281008448246A448008902481885911A304282203182800888817084F2C6FD00000081424942182801221284831104222A1484012800200581820084801998982884843034844B12628D
+:80EA0000184B21C048228182E08221913620F44A5E008484902844001E241A0212414C8A081681E891480148811001195118111E4115B228240311141148990113E113948900110014118094480022B04281F3759D2008248B24844285641410040085C114828100304840A421A280E44204624548116884260816840242418110020040A5
+:80EA80008261880029018C0418481F310521280044642C02A14221287044122822284584014D2842828F4401003200184681216484288044A8414448C048488C8289B12884A38122484A82490488BFC3073880050080018091484280140445C8116012601241406CC18100008880088820A8212848C024A88308421B8482808401002E88A3
+:80EB0000C352482B5C24108152814C0441C41A94211009844C085884C8CC014832895C484E228188288C0118411C034410B8240500008041081240048F410820845424F0AA93E0849214584100421AC2244A114824A124002262288001AF4804190549081544B289E182C471804428C421811E214223C2246E154714E0540868201C888407
+:80EB800038482508278A22F942A1248E341E123982342C2F44F642442F81F614742D481D485AB614F182EC5119B714B4919E5417484B3319A5A94F92DC84C4148C32281F83F18A81218E482AE4123D144D853E188F54314846F91E444D8546F1C81D8B358F2A32144AB142B834D2889918C28538928E1889CC586B44242B41318446F42899
+:80EC00002C30241D22CD149558488B14ACF141868B148DDE4F4198A845E141725CE944E4957A28BCC1C226B9B47C7811A4641D1C97868B26144B248ABC58B4888AC6118F4337611AE683D124CE4C1AA5B41126D8A82CE8860C3A85B92AA811CB82972A20323C22C78243E44454884F832126A6113A12D48834143A32C86E1C8FC67149A916
+:80EC80007284C742495448837254C8512D31A5E321A2711E148F813188118A43618B3E28C0388B166D241392811588E4199C598AA1654399924AF268484F44F6242C2F4CB2C50D00008400004008120014400181000000002128290100100115081150810020090082400882002029E417094F41D5D5F13C34DF7276427444764AFC6D3535
+:80ED00008D5CDF72941E1D118F467159F5DAE8D7C19F89BD88F8859187924FB3F4696D1F9FFE656DDF16F66C7E6F42F674223FF3F37B4B77713B444F4EEF96F779717AE7D5F138115F53B7C9FC4D5FFF96F6E5C22F5FADCEC7841F95C5D41D13AF8DF16C6C8B56CF64F57AB8FEF22F25F5ECEC85F832A8EFE6024F43F55575CFC3F32D6FF8
+:80ED8000EFC4F24C2EE5FE4F27EFC7F76D4FAF45F559598F847719FDD2C8DFC1F14958CFCBFBE1D95F97F37D7BFFD6F7B5F17F55F7296DCFEEBE36F73CCA27E3AFB77416FD71694F4BEF86F731791F17E751D118F23D6D9F8DFC4C2EAF86F4E5C22F1FFDF5358FC7F359591AE929F9DA38CFC7F668D84F65F5FAF8FEF22B77AF87FD141895
+:80EE00004E5C5E51A0515D558FA3D3FF7266742C5ECEDFF4D2CEF43D3FAF46F359118FA4F3DD9BEF8D7958F93C489F12F6B4988FD3F23469FF96B7C4FFE5F9CFCEF66DEB7F31F5266297F39FB7F4A4A64E414F4FAD77CE681F1EFE94D49F8BFB25248F9CFC5C5EEFC7F765662F56F7F5F59FDCFC79795AFB4153AF8DFD6C748B76CF6CBD8F
+:80EE8000F2FBF8EA2BFF6FCFFFE8C88F82BB6C0C2AF635658FA3F34F2FEFC6F26C2EE5FC7D3FEFC5F52D2FAB379F95F1485ADFF4F5DE9CC7D5CF86F5EDED4FCFFD757DCF87F76F794F2AFFC175CFC8F66DEB7F31F5A74B9FF3F2784B4F5BEA96F4B4D48F86F791F1FAFF94149B89DFC7F3D8D9CFE5F13B79DFE7F762795FDFF3F8F89F97BF
+:80EF0000A7D51F3DFDFBD9CFCFFFA8F84FEDBDF2FFF8FAAF8BFF74FCCF8FFD4CCCD50C00228461001A14C44820019E486089444844400485249828400489820118A01210042A014098141A2462816089006088288A049228D04822F88CBE3086282A413422C4C128611A2246881194824889228378310816E81402444342D48245712302EE
+:80EF80008C088492412888841828C028C1408122341100389608148148189CF4EAD8C0531F41522A1F4132481FC1324A1D24AB141D24AB941F81B24A19F54A9253F24A9153F24A91478A2F14F924481CF9244A1CF8244A16F1244AD6F1224ADE252FA2E549D2A4F491243CF4912485F3912C87141F49726AF1812CAF34F11124AF249921E5
+:80F00000AB9451AF243924AB94478A2BB4478229F934484AF9244A1F350A4D5B1A563E1B6187321FC1724AD241F24A131D242F54E9C1F24AA349F24A9353B24A3925A939242F147926F842915FA2E514F925CA1E215F826C5D65E85CF2261BDE254D4ADE282E4BD6D43CE489724CA3698736CCF248931F41F64A171D64AF349B25AF34B17B
+:80F0800024E4646982AF64F3244829F9364823F424182F88040000004400004400000010010000000000400100800400000000800200000000704F0B444D222244AF11342441948711813C51A119440840A84372330296688C4628C224478113C22C8C119426124906416C514918276143682250841AC8C922A36421C860E14D728E222EE9
+:80F100008243241494443743142C2668318C41C418114B242C721481288331128D118618160A4483644222228242901C1A3C64996281448911A2142212A042188F41A84986420C89E12178487418C22400438105856497F0CFBDF02442472438E14CB528117424D18153875961A2663112160884A12CD514C24A1EAC4E881A26684A89C14E
+:80F180003DCB294E3417C2CC22D1B414684443D25AC1424B616B18C9B25248F41884578C2E127E884C414814DC22E74893E26724C9B4347454D2120A804221511A44148C04122C38111884148658423A84020028842848442044082941A412802101120098D028084048C2482F2429821104120081F0F5DB50244C921A0048458114241124
+:80F200000234501840213948A2288042684448812A54484112254224022A4C94169018488042028B1480080042848B243048438811E4C34102C0A54D1816F4221232C1831204C018814512042A248244C8189984A428444D7280658C4E2846A824238815021C1218012E14214C76889522C8422358248F219C286349B2842182B16818F860
+:80F28000B731106242DC5248809214CC54846C014048480D80232608C04889241AF4481222414DC88C7642682482302270261138114210C242152E064A3882418B418B244098168CA2188BE1F011FB5024909218433152271280020013110261148A142836288C61126044424982648520012D24221AA484441840083684C224888C810CB1
+:80F3000040C282D0C2292628140445F842B6400C282C14C1238481222D128A11514862A04843C1228301602445E814D1868812CC182AC81884848C0480C4281AD284A52518412E8423014C22261408E722112041B328C18890226F754342287319D412D64884A14200830228444712842230452002458A8303A02124817016E14235228E23
+:80F380002138172284512A0C81842170A40845AA211442882E88802461282281F0D824404204180047117B1248460489011258244810019B4A00444A4229C42420440224842112000022004E28480088218C011E4144C025A01482487F324E027035B82261C416D1927716A1242FA1068C0244182A98422604229368844C41A442224B2125
+:80F400002CE18832585CE1253228A123E116819224C442288514F21248C82828D21484E9F27288A0416CE388E38463884AE2F50D45E2410211258112C42840843911811B418384C41419D41A014A1294281F22D448D881B84878240824816528A4822824C0119AA21216088E2422CC028C5422844A21084100200870C3022442160210C44E
+:80F4800029204391114A811484054E142A811414AC148424104464453C0120033244C04481448741444481C02422A2D0A444412401108452841441DF8602221001411B21414440840889011392218800107224B111341322930A268854818A44440D1200144A2204208C32422118839482842B8420244222844108DF41034015080040683F
+:80F50000A21826284196111054413011844C6181846E8441488C4182A242902A18464841220112182913C82448706841081C68414228256481811A021425F8CFE52064821A942C8110A22180120210188E912844216A012121841306531401241F41244148031C440100008F142101181418211424450862408285A9947DB1200441224921
+:80F58000212212048DE24C18A91424422448801192688021024D42A0811218212412481858C41042044961284F18D2480A172490111018E2442184016088E0940E2C1141022064D11485141168428082C1848249C4248421468C440E8302A415C8483AA848C28CC244450828852412386830482183843148B048216984869114C9D8821966
+:80F600002412F45A4B24404241021C0148124180041041088941091011048501144260120060410011446220061504128018411C120281C041419044842F6B032F18215886137412298461221008854249440884284666422200108848D814081211811084F41422624F828441F8148236823214866121891281111448C41A4581450E25E7
+:80F6800015F231444008484482450842415A284124E211128429012112522271484C054A09002882460181842C810568480013480A4C84810243A112880060882B12244BEA3052C71A658412F661198351414D144B44298B8655452995191D14247F64352CCF44B124D2119199489D2A484B6911BFA1B424F228421A34551447411E64CD74
+:80F70000213283F56624521F8EF24565AF8898213A784A798C7246C49A8F461238214661442B1D87D2AD824FED4A62323F28D431D127645945F624284A518A8FDA7B88F8191825091755453414323659223E28AF15558845F64E25C6F45C198D922F82C131188CA31C2E14EF45A1127941F44C144D748371269E8C2F2B981427A6997211DD
+:80F78000E251E52171DCE481F192986FC1F11CDECF8151C44F397644F437538005878187428D181AD651B12CA6233721471142C3F71A13CD289AFAEAC8CF44035E3C2954C14F45F4626817824BC21574416D15623F3DBC94588C8D68481F247448F1221A6826A85889C35589F121668B51CE59583D88959942614F44A464F022A281988C0B
+:80F80000F18444A02520012044384420042200408144010044008200801108284128182840088418200288806881888028832882A842A04B814F2A4CF333122FB6F13A3A2F32F71CD8CF17E751F55557AFA5F546ECCF99FD797BBFE7F54643AF84F545C6EFDAEB63F31311186D52CFD3F714117FD456FD7F2AF757514FE5FD544727263F5D
+:80F880003FFCE6266FCBFF3435DF17D471F4711F7F63F336644AF6D4E2AD68BF6CBCB2FFE9E1EF8BFBA2A2ABCD5BDD3B49EEF2AAFEFCFE3F2FFB36354FE7F34C243EA44F2576BD45F333123F33F53F3AEFB3F35E5CDF57F76D79DFF7F77A3EAFECFCDACD9FB4F47B68DFB5F54B58DFEFFE9E9D8FE7F77B794B76CF82F36F69DFD1F4755594
+:80F90000DFF6F42F66FFD5F574F6DFF7765AF8D1D37F7EFE96F4CFD7F7746C5E461F73F51F3EEFC3F2485AEFEDFF6A68FF6FFFBBD78F6FFF7EFCBFBEFF7BFF5FADFDD6F4AFEEFD72FEAFAFFC72B27F47F5FCBCEFC6F374FDCFEEFFF41B343F25C763AFE1F12E3FAF83F37C794F41F1797FAFA5F1CBEB3FD9FD797BBFA557BAEFC5D5FCF1E7
+:80F980006E7EFFB2B276E642D386F436751F53F7657EF7B23FF2FE73715FF6F6787B6E52BFBFFCE2B72FC8FF24245FD5F561531F72F7393F6F43F3484C4F2DBE36F7F3F76BFFDF5FFF72B4BF2EFB5BA85F4DFD1B58CF2EBD28FEFCDAEFB7FB3616AFCBFF8E9CCF47DE6CF13593343F25D733F31B1EEFF3F3BA78DFD7F71C7CDFB5F72E2E30
+:80FA0000FFFEFEFBF99FB7F75B7AF5FF5F5CCFF2F34E5AFFF7F77E7CCFC2F126187E75DFD3F7EDDEFFFEFC2B6FBF97F7EC3E9FB7F7787ABFADFDE2F7AFC9FD7D7C4F47F574525F72F33D3FEFC3D3E8F5DEFE6B77FFF7FFFEF2CF6FFF7274BF3AF95E3A5FFDFDFA59EF6DFD7A7EEFEDFD76366F6DFCB6FCCF48FB34BDCFECFE1739002042A6
+:80FA80006812804108841484341648A541A041850485044A0228902811811890168118901400901440021C486832841412348424128112200882AF320F145014107811044CA2128614024A0181418D823A24241232141445581861144B5210C2218C2801C04228148C62241E284342D824A12142288D124130148141819082168869887FE6
+:80FB00007B034F22F4112485F3112487241F41324E1D2CAB141D24AB9419B24A19F54A9153F24AB15B422F147924F842914F82C4954FAAE414F8244A16F1244A87194FA265594D4ADE24ACF491242D531F4952281FC932481FC9B26AF18124AF24D141B24AB911F24A9255F84A9243B34A39242B944F82B442F9B4488B944FAAF4CCAFF065
+:80FB800026481E44AD411F41724AF21124C7241D288B141F41F26A961D24ABB449D63A9945ABB45B4229F934482D916F82D452F9A45A1CF124CA1E816FA274C8F1241AD655949E216DCA8E282D5B1F4D925C1F8932421FC8B22AF98144AD121D648F44F911242DA25D688D924B4389B824B44269822F64698BAF44E12AB18C0B828200000D
+:80FC0000000000800200000000008008001240010080040000000048000000005012F062D314164146098022C22425318C80384841486B6127222602854434181A1824021818444598162C0898A021166119D021C22CC3A28184A04823F2528889814904107818A28486A84A22EE5F2032B3384799671116151BE344F22251232182D818B8
+:80FC80007491041B49128B122AF5211826618281114C024B2413212422C214C44D312150C245420856D214A2428F68444849E228D4A4048B828F223481448052584978BD0F126F2CE381321525E412511A4427522D8D612850143C6F461BC32D3212467C31FE2811863818136248121E645361E42038128E19CF3221019B18491451421EA4
+:80FD0000644D814864CF28C4232A88715A04A8A48609248CC8C12721CD47601211148CC81144269221421A8621B848C848441221902832003841200200E0412242140422131106A3C22885A22183E28804848F24E188C48241812A0447812B84228D2443FA34DB001A0284224003426014A084008488222100004800812001802408860445
+:80FD80000082881504400200850214840010844808F0EB1D104511085863010000911522D4120C1144818AD24822020042274289E12228941883024812204288F12458988C128204A72880212414F218C241861218242208B778102402A0212110220410612424C28414248160C22800008400218480280400849018128421406228400828
+:80FE0000422186022484448100B7DA103111818924341414006054811B824814803824200A002905C8274283A12948121D6800478980029AB46438852820144218E422814441E8844184188488823812BD453023100A4461D022C23285212A0421840046C61580E844C841644582420820C488212B42001100C0282301200162A0412D886C
+:80FE80008122C062B08841B8448142F276710080410414004042088214302112182229912200C0481012C42844271260814115C2124151214142126130481824000021A0249062821E44888FF90A80011502811214150811172294814825081481628418000024226400121028228242381980088125080084444C4408848122184008DF00
+:80FF0000E24A312318A34105411217221611BA8862162D8885815483D0617418C1328B284A8154244D4A103224C7224217A21889514826C1216952848711A0C11245628146A834701258428D442210E884E2A8C278437C2488F81C4C00005026154802831251124003812218126C820443480120121802452248A22400290134702C02244E
+:80FF800084000042860884212A142201124A01BF3E0D004008440000140000000012200200000010082888000012244022180840185281002400840040F2E1B110D1520123111111011D2810185181450820684824001021627410084924112422082B1843D1124861288830122860212411244001883014304888C122EFEA0C3011241807
:020000040001F9
-:800000006489C8638026C84823091C088B28848981326882828521D41C0D4C64C623311A278325F63842C37475B884D32423B2226468CB4916B129C42215E442C8968744C24F98F2C2228E1819A1C33B1A1A323999E281BA8A94E1C09A8AD221EC43C4D21986EA6184D184F52211321C29B1286C824E281A96522E8AC88C35629FC4082130
-:8000800012C5C124141E28141224842B848688698120921219A4B48C8422D24803442250828188829846B424012115C411165818844552818B828A0286880888129812812648248242F8899F502290124C921416C4112881112931118117884A618821848B1484B0854411C18410885148C88A92D2CA92C48A220221C0128A041062812C0B
-:8001000029C112924CA94930148132A8168821FA2A32209624A63C1A2ABC4942364C56B534AC482B42D248471836949C2E964B285721874C2E184F81666A6883E22491287A48384226D62C1198442D461B838963184328E342B938EC8A644EB3E622C449942D4AE083B48AA2618E4860488F4852848D5B24282136B81822736144F54428FE
-:8001800087544F12C8821AE28C81F481142AF812848B214E88851284DA18044B848C7258B2280182A6F2A44220E84CC2428E13C08186A2384B828B1A8E684333411A7212F3811885A4C136A83883B2480918493384EF550D484D224358424E8416881122A114236514C08942C94138842D341D144E88DCE541F224832800E0CAC54A4212B9
-:800200008F4D324E2443826283301448182C04ACCCBA484648E224094612AC41222A7884988826F8E2D220F4344116CC18428C925627112032A9481789AF420883219418AAC444A3E828214165328CB2883432D0429626C581C82A4F88A186288744924438C2839428CF2132282994916AA8188388FE13228A46440280F1B647244582044A
-:8002800060411840648344181427442AC418111A2864918B1249C14284284F84C1428246641184864AD248521483044442E0825584E01192818AA494472330248994214D184212A88D821D74448AF37754A01200269121499428241148C0181081642C44241021C628202448A5128146081B143A843182281682812B028212415200844645
-:80030000480819011130484CD4812827B4C14792341641C4192AD148935E1663112E448893B412DC149C48C22D4418A37B28B582A6D28CC164AE4927568B43AF419451667AB17C6EF2249826B4A48491121E84E082D484A18453E684E128B338D42AE494C1C49AA4831EEC582BA44E8C8F44882421FE42E6C0424C9218284714482642340B
-:8003800028F0281112854388711188C94846A1418D14841041440A2281614218D0A228A1C24C32289A92148A8261812E81CC84E841824818484822822102478B4E24F0D245806441130222441B42411B421564882098841B18832471282468429022401421848104812918682245D18288941812224452908218101292C829B128941230BF
-:80040000121A5842C02886015E662426088504A42001240083C242001332448891C820184C1104891445081648668DC6E82102212D26A0842880A22400891214881898288128224A885128F0F58C10840241128C0112890140588480144828844481058A3143404482A8184A182842480160422882188840042AE484092488182852260CF9
-:8004800094804181B69201AC41E1214401301981908A6A81A8126082801A019081800288212850211992218E444110E418021116180146011368C81481902410AE82208448B4842443FA3C5960141A14941C00804225A485588847819146044588082048041CE444181474184422682128200C84400280A2282021A28482008A84883988BF
-:8005000042282818986F164402812D682A942E214C364428000020048019A41482111452188008194C1C04482D88D082A5424C2CC424888825140464008B215428644110E688114804CF860A00482028111802405842814022480240420810440C14142222463142822C04400600100422200111808801301414008C0C2F514F71813A88CF
-:800580002D128423445424848F41A4C38028011A82A181204124311192200C124A014AA114A218E084B2819112242E16221AB221094B1826342B889143544B41C44A1821C2284968524D883F2B058414484661418D214001C4226624D418021018B1411291214421C032C084214C7483844248A521122628C84140518460A53418C02622A9
-:8006000028182C8861228364A90021223F63052F71247B2E62C4AFA2982E93C2245B128F4182A8421ACB188A95E38B5849B24945E4193981981A94212364478E1197AA1F46F399318F67F23CA865A26A5E129E3C4D322F25E841088A69484F11C124DB518EA819588E1E84C7884CF19ED8CBA44B846A7834F8A88DAB8C7FA74121F68F127D
-:800680001AD22A8253815E26FB148D626F88FCD858CEB8478C15B438324C16FCC2881C98151D6814C75B475446F18444415F4494C42DCB2E888AFC42548B9A4E8AAE814334232E2457123AF821612F82FC83C6C12E21A3768AED41DD14E443B99EA8223788AE29AF8862484F11F434221F6E46126194DCF1154147451E144D5984566D146F
-:800700002A12DA28348C179416A8829D154B28CE61216BA124114FE80C8D13215E15C3F842464568281F94B41E9163A72286951829E6C847B614A2227E9227A8E02204BFA8B342E2A246E421751A94148BB438841F6808280022702201271230221002250125A54A212618E282042E4860A260A2000000001110111C31481187241142137B
-:800780006824136124602440124182048A44F4D384245F64F24727F7E1ED5C7718EF64F54E5ECFC4F41E1CFFFCF9FBF98FAEFEFADECFECFC94F43CF17A7BFFF6FE77DDCFFAF89B39CFC6F755588FAAF88CA9FFFAF3125E4FB5FC35717FF3F6B3B72FCAFA9436CF6DF4D6E75F58FCF1B1DF89F818F9CFD4F839754FC5E49FFBA497FFDEBEA7
-:80080000CAEC1BFBF9935F48FD4D754F4BFBCC843AFCDCCC9B5DCFC9FCECECCFCEF68A882F8C4CB141F6137BF7A3EFE3733FFF7C76CF53F17A76EFF3F1EDBF5FFFFFF2FAAFEDFFDCDE4F7DFDE2F3AF95F5FDFD5FDFFDBDDF3F1DF7E4F44FEFFFBB9B6F78FA21A52FC3F7776FBF31F1796FBF5BFF98DF2F897B9CFF977E6F4AFEB1F11F2191
-:80088000B213FB589D9F5BFFD1CB1F8FFBECDF7F5BFBDFDF1F8FFFD8BC4FD8FDCCDE4FCFFFECAEBEC88FADFCB8B88FABFE4EECCF9AFAEAFAEF8E48F377577F72F43F2EFFF2F32727DF76F76D6CFFD6F67D7ECFEEF7B8BEAF8EEE8DDF93F815967D14DF8DFD4DED9F3DFF878D5F5FF5E674DB334FC4F5E4C71F12BE3AF75F475F53FF376F00
-:800900003F7FFBE26D4F69FFB8C62FEBFE96D45F49FFB4872F6BFB8FA41FC5F315E5EF68FF8796FFA8F8CBE52F2CFE8AA27F4CF94F456F6FFDDA846F6BFDFFFCFF6FF7FE8CEFC6FA34B48E96EFBB44F37757FF73713BF23737FFD3F87F75D7725F57F73F156BBEFEBC8FA7FDDED83F91F95DD5DFECFDB7BAFFD1FBDDF67FD9F9BD1D4F4854
-:80098000F99C965FF4F5ACCD3D418F21F57D67BF39FD596EBF7FFBDADE2FADFFFB4E2F6BFF97F74F59FB3427CFEBFBB9B4FEBD4F6BFEAEF6FFE2F96667AFE2F322AAFFB8F8C29FEFE8F9B69EEFEFF1B6CEEFEFFFBEB6EFCFF8CEA4CFFEFFA4AEAF5A0A002184210084418E480000608800100111442004460446040042200430223022003C
-:800A0000124928210220410444928112892201B0EC0948174124282217C1421E24141A3268B0487914C8811A14A8411CB81484888499441C088071982162584FA225C8181684E848822129664962446384B24A08AF24084E824783898954624D48A843C824841FD6092E421F41D238F1112487241FC1724AF21164AF24F11124AF24B91182
-:800A8000F24A9253F14A9243FB4AB34B422F347BB4D812FB34484EB15FA2C4A16FA2E415F2265A8F19F2225A87594FA2F59824ACF591242CF491248D121F49B248F19164AB141F48B64AF18164AB941D68AB945F88B44AF92448AB944F82B442F9A4482B944F8AA4B44FA2F44E3DE0B2F51144CF3281F628131FC1726AF21164A7261E246D
-:800B0000AF74B811F24AA65B21AF2428D93A0AAF747B94D81AF21248ABA44D1A89DBA6BC48DAA2F588212B5287582F32B588E2127599D4A2F481648D521FC8B248F1816CAB141FC8B64AD1C1F642141D682BA45F88B642F924482B944D4829FBA4482B9467824A7316FA71686088820000002400448002000022002100000080010024844E
-:800B8000000000000080040000000014F0C86F244815D681D1240116141811EA610411C841890884252CD182880287114C0448C94182A8684A88012914C1148AB22868184AE18224658888112A31221E881E48462963C5226C749884628848C9F66AB9D02422196482897342F244214E1C1745893858A968818B854CF4419C4B495E81442C
-:800C0000437414F144914C86D8844C6C24C07416AC122E482F8164413AA8242981E122511843812AA7614AB2880440E2414888D24A349A22C21AE693084FC6046C72C59A188D24F0421299924937851E4647811D888B8643A524471956348E188E441E2316B52124EDC4388446044B948B385A3A41AB146935914CF7C2188CA11858CCA753
-:800C80002486A818144F879822830B6F1C8161446D486CEC81CAE28CD9186F86CFC10A2924511412AB1244436441418668248061888D848C94881B416484448AD44811048C341825829244E082018002282A9821A501981A268606001E488126983822A911042A04412F380F3011452301150490121F4102C08149A41480090040488184EC
-:800D00006882142A048400122AA5284811181289A128424C12021800604441208218842808F048928015C628C3C2488393424148B088D1181348C388172489C42248ECB211B81464414D28A12C84311C2B184249716298A4244391144B3886312448AC61118F14C8646C84C8A98975846281222F814486C128468896848B289F9D0C18250A
-:800D800044A1218143211424E14162881881148C41B142014828291114C444892836126E1412424181266424C0441743184C6381B6E21144044198892A249818288394249881824A8228FA511F20B411D42C128CD4A10290421112578219CA44232CC488282185C4811E4A1C61A21884865128888416E2148289F39824128AC48120440820
-:800E00001F8AB44662244411891334464582012143C24882442D181F43478132124490121311382819B244B19202408104902489290488288DA22034183682819284412C07181932227082E86284813844284484182C8101184CC24843C816A2434484F8DA422448C018902442224C115818842A012D5C30C84216B82404312E14461C4442
-:800E80000810D88484849622843E462C82084C01002E48206425822B28908844E30423915222450880F2162250414429028551A24160210090488281D0846214102E216411144724602400188156088200200860821694188389021384448204420083042880B4C606172418630345B8437124C8181643988A1889D48288A484497641D49E
-:800F0000845E2E184B162E1C478A482384B522714224C36C1E6C8CB326CC221392224B1881642E188F48B64CB148F814226018422F21C8442B414A82759234648E2C4A024AF89DB730264481F0221184214C32281F41A41228B015144818688318481482465121850481848381241822C41212884022280618A012488D821A864108454826
-:800F80004628648121414426F234111004142002218C22021C01200111202114810100904280041800281813014400188001001480090000400800E0AE0D4003250200002C914813812164111218812E181A14911181260AC1444D1800722D2218002A21618116D641B21102230813251288141462212045288C1644088F9F0F9041350266
-:8010000000208202601112121941018061111C9111848001604420214181021220114834163224001C14412841140221101828141408BF5602C5B8488464242224400818ED5545B424A2622218128CC16848242552221E3829F1D6888E84830920762373112151988F82B14CA445522641818108184D2445B4E4A222221880058A64222540
-:8010800052221AF1C6AA2420010020011210011819011001480000444004002002000080211102000000000081000028007F640C81844248100428004445C124222816420800112502211298868108281840414198181E484692416041000044418D2422A8482904400425022D14FF460384215816020000004489B44812014018810414E5
-:8011000021124921821A04A48044011642188204000000400428420000480021F05DF900482400001842604118280020010010021880081004400140084800001228004C04288420088009100218EDFA00001301180018181200100800000000002002280080010000180000202808000084000040F4D1262485384860242800005054C579
-:80118000F434282A2312114108405222241244928282480011107118588A8B5442423280010045948C4F8222228224440840522225A211BFFB08188D481AA444008001005044A0224018641100401282A111198808204261311C110285084E41008140010045042A020048004012F2955440220100400830118041124101120000104484E6
-:801200003224401404000000214C68292001000040A248C8128800200844F01ED300400600124001400184120011200200110026080000000080110200001100400800004800001F990A1229612190220090511981A1118C954814165299C5581100005422281F820241282200C012212118292111140811802448D888A8444A8154884207
-:801280004A040044FF5F0124C014160212813212121651182011498141818414110150444130244C248202166221122CA11116228903200200888142602888200800002F2F421222013901411A8101101131183D1918200118220041416042144410981242800100865431211AA1110011888110A288484608124488284141CF88046F22A1
-:80130000F212222E122B11122B11C0122592832F31F111119BC81F98D888F888418F8424D49154111C548985F844488F44F424444B244F4222E24202284554642E346F22D222E222B192A1812B98828E922592832F31F111119B989E88878489F44848424E4880548885F844481FA6046F2252262AA1131200182592823CF1111319E88926
-:8013800059888F18A4444214154151819588F44844C5B444A2262200405444286F22D226A8123AA1818A2848512229C8131F3191811F897818B888AC44420040588848FF4C020000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000AD
-:80140000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000E
-:801480000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000008E
-:8015000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000D
-:80158000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000008D
-:801600000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000C
-:8016800000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000008C
-:80170000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000B
-:801780000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000008B
-:8018000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000A
-:80188000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000008A
-:801900000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000009
-:8019800000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000089
-:801A0000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000008
-:801A80000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000088
-:801B000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE07
-:801B8000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F0D4
-:801C00004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000000000F6
-:801C800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000086
-:801D0000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000005
-:801D80000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000085
-:801E000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000004
-:801E8000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000084
-:801F00000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000003
-:801F800000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000083
-:80200000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000002
-:802080000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000082
-:8021000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000001
-:80218000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000081
-:802200000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000
-:8022800000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000008088A8888288888A280888888A8808A088820000000000000000000000F0245C00000000000000000000008AA88882888A088088A888828A88883D
-:80230000080000000000000000000000F08CE10000000000000000000080A888828A08000088008A28A888820000000000000000000000F0766C00000000000000000000888AA88880A8888A2808888A28082028280800000000000000000000004F6F0800000000000000000080A8888280088A2808888AA88888A08882820000000000E0
-:80238000000000000000F01D3300000000000000000000888A282888A8888A2808888A2828A888828A080000000000000000000000F0AB5300000000000000000000A0888A28882828280888888A888888A888820000000000000000000000F0C5230000000000000000000080A8888AA8888AA8880080A888008220080000000000000019
-:8024000000000000BFE9050000000000000000000088828AA888880000882088A888880000000000000000000000001FD9070000000000000000008028882888A8888A2808888AA8888282828A28080000000000000000000000FF6849216481185024C048458834142222003C42081144288F212201001121211829181188485148142855
-:8024800084482D51414901481974240126414C02606180222101827F6E0B311B243598492794478443A22463B2417212058F5A11644C53D242D22ED72133112D4180F11246242A35111F21F8852887516E981F49C6488B861394421785111548CC488B42CB5226F42286A0828D1470643124276226F82412D82F88368A9223F147E420C483
-:8025000021A9413A4525742408C01322B0881334C12902484D11702102124602210028861821081028A4410017819028E02244651200411744800280A494A30816F28D932414128004004D624064515041805218D0490211460810042A24612816CE14222E44888B826C042285512848441AA421C08280D84913084165E2822181C828121C
-:8025800000AFF806100811844848E04402800200902210C2121218100214112D1140915881844001818004484444002002002302444124008E12B074012014014008848006004044143412282902001220110286018213819441401101144184C048442A14040028007022820300829FAE0A00400200000000000044100100000000000044
-:802600000000840000000000000021200200289B9114481150486244893121818B214A42281494161A32484598114B834A2301882229C44466A2218B282091428D221A2485C214111A428493292845E885024034448E28278600868821722814F457EDA021186031119B412A945840A1181038829368442B18182346022AA4418448472238
-:802680002285D4940C89AC2488484482294149E688D4820223349AA83041888C11384418496C8242AAB4888408830C4211106916448B212611B819A22DC048884D114CD38251843B122AA82472908862214CC4488DB186E884A84329C828581EC2701804CA828232682B1A85E4854221588443E4E6883184208C6B82874245F273EDA0129E
-:80270000126041211F8124E4810400842441A988A4841242439112A014004F2284722462442200422C44041A425141AD12C42C1111A82880041281B04882942884428A84087F14094004160C00166C261B286A19A1141618321444122812811A84B2211498451443E2411204848902282C044B929A1202838424044A28814888618188007D
-:8027800086A884451808EF5F094B14302CA0522D18CC962325C118E0A4C38869D448352B17A38D221EC8AD62433F25478581533C288C7713984989B72461459A2491C229834319CAE83E41122E981E2856981822705194C849A442AB433E486A21A1B46886F43CB710044538142CC5184986631419A8827818C9344414C418E82B14499437
-:80280000248B241CA2484283D248E141B244A22185242D11C2422A7111383823C811C0C81A92188118202141682A8CA6428B41E048C14888AFB30C584428842810585A23B21AA21491278C23D1A2913C1F2291282D1883B22AB91164418C541C4D291B4133D281C41841588C02AA343230A423C8682AB448219348484A8982984DC6684532
-:8028800042188CA1824A698628416E6C80F112451658228726841C7222952A2249830187128C01EB21184DC8443E424C8321CA1C4CC27249C24846B248A1241E42401C0443D71A88C4982338188B41184116A248E6084846AC482228182364884AF25BFC60142C26021241E9C4480090281822E0880545184148E5883426898481240820C1
-:8029000011014C1284018C33481A420812142A084338412052844582211144E48422B8323414DD2A30220089020012437112948142218E524314014A22210610582140182894268D244400813CA4612100274149926841008C732208211288A60284420010B84442F221421F2182D3A2A26145D8B6B425711AA2211E21268A618949D181D1
-:802980006D8376FC5188C3D441B548CB1C8B82A122AC4674247858D64184942485B4113422283668A949F118267E889D145A283128282934424CC1C68B8229952C46E48423AC1CC972120B184481502820C2484342C4841A0419344A504240248212849241444D48122E4242228361125221444D52124592218324083028C0921F818468EC
-:802A00008881E044210822008982F4D8F3502222260450822184324442280010111881322183141308C724424F2136442C83D72224542850222E41501822141E481422A0128880088A8404CAC388892185A41848FFB1032816022880322828F0C1386044818A21110432188081144282322481261B142C12C821410081496284422828E0E6
-:802A80004402728883948400006044D0484A061F220C46344410048064412001E02114D48224A361359446874143C42C49F15428848C58261854184890124A8391112814161231488021112182822124018246CC48228A0410F4256D2440821432484424244290181082011044089082906210741261121126826812212C1488B22298182A
-:802B00001880014A0184448144222840F4481412120000F047DB80168431486644222216384881837142044A511846C8144A514227284491A0248242414848601200804402122218134228E491381918400C588C48B45428A283184814AF990F241C2102809444202422962232688014C2629041A016248514B148A28184841C6281801139
-:802B80008102E022048C040026644688428C8D812C282188A218A02C1AC88867A7008044144208442810A284109822498208223028840000840084404C0848644A014841224249040088204804001004414C12F43E934004A042830280411482931A84A181843810941A4382D126044044216185402921228121414208183018D081810CC4
-:802C00006A011238001004802184F414774088B218141A82466224184140044D614429058C042A84012B212A844181A84214002A8CB44828448882CD2228008B34004885448442240926286288002322F8C6412447221F213718C3562A6E284E2816963AA2AD585E6A48EFE4F12A428F44D288B552F32244A735DE642B146E47E97344F43A
-:802C80002A216E442F127113B9268596328B4329C5121F2687B2296A222E6489B429A24626BCB4D789A21FDE188B891AE2413D845AFB28348D84A2BAF5643163BC3C0C4E442392322D428C16C4462D182CE4D4E323B22AB9142149E4938172287314E282518C3A56842E482F92F2444CA9F11424497358711A5A484E2A4BA13A32928785B9
-:802D000023E18432484AA2411E344F15F64184CAC168484CE144258461CA4B444F82028F44A241C4578E9022457424C22C66D42834224B6643B71C2404A7A619E48591456B875D4C4AD345F62292D5BC1863448D421B895FB1F249488F66E4887261F161C8297149B84244E522D1B4A1513F11E183E11451888951183A8CD8483A444B8814
-:802D8000828F819C4C9E889AA5D549E84888FCE5470000801482041288800888C0811214402141015021C012C012822486C412860417485041504150C100000040480400000081AF19054F64F6571DCF23D32AE426B268F64A42EF66F66664BF7EF3E55387262BCE5F7CF4DA761B37FF7DFF4E4F7F64F4C1C67F58FC64455D547E662F22FD
-:802E0000F6697E2E68FFB4FC83A2DFB2F671B56F67FAA6E6CE474F5CFCA7A47F5FF112976F52F66D6CDFC6B231F72435DFD7F77DFD8B998F82AACF4B918F8DFFCC8CCFC8ADF9EAFEF4BC8F8DFD4CCCCF88BC44FCD5A8F044645FF1F52C3225F24E6E4F44F64A42EF62F77E74BF7EF6ED478BDD8FCDFFDD472F6DF55C4DEF7CFE5F5E7F7423
-:802E8000F584D54FDDFD6E4D5F47F564746B46AFFEF632361F57F4B3B5EFABFA33F79F85FEF2F82F7DF4777F7E233F8BF7119657512F97F769597E714FD7F1595D1F5EFAC9D58F89FCD8EC4BDDCF8DFDCCDCCFCCFDFCFC8BEFCF4FFB589AEFCDFCDCDC6F4DFD3CF1246F64F61375CF63F22E266F44F66E668FA4F47A7A2F47F76AB66E5EF4
-:802F00008B9E5E785DCFAF64E41CFC4667BFE5F74676CFD7F79CFD7F46F5485D8F46F72365EFC6FC155ADF85B532F3B6F89FF5E39FB2F2F776FA7E7C2F17B3B3F51FBA27C18F97F768284FD3E793F779594F47FDD8F48BF68F8DBF14E94DAD8D9AFDB4F8CF4EFFDC9C4F4DFC66D44F48FF4CD8CF5A084F64761FF73C366762EFC4F64E6EDD
-:802F80008FA4F66E7E8F47F77AD68FE4F44852EFADFD5DC5AFE5F4FDECEFC4F67C3F7F64F76D7E6FCFFF5D5CCFD5F5686C1F76F668C68F53F15F44DFEBFB342A8FC3F7F66DFE7A5FA5FC72775F6BBAAAF31CBB16FD777C9F86F47D748F97F759795F5FBAD8BDD8FCDCC84BDD4F4DFCC4D4CFCCF5F4F8CF4FF7FCB44F4FFFF6E44F6BFFCC76
-:80300000DC4F120943022B128422842212400884C04860818044A441812004004684818231482084012210422802224843824421018C049244844C22482441042F210B230A22444304C7241242162404293114B011D448128131312D845B42184904190455081D4880B1488224C413112A014E11E01241089A048C86B894240442824A413D
-:803080009818A24286F19514D022F4112485F2112487241F41364A1F41B64AF18164AB941B68AB9453F84A9443FB4A9543F2429147832F14F924481CF9254A4E816FA264156FA2651D2FA26D5D2DCA9E242DDA1F49F222C21F49D228F8912483F69164A3F48124AB141F48B64AB981B24AB985B44AB924F44A944B422B944F82949A4F8AA6
-:8031000084F9A44ABF4C032D4A1F4116F81164A11F4116FA1164AF26E148F228151F48F64A325B288F6431B48F7431248F143B342D814F82D41AD92595B84F22C8A14FA241F1249A1E254DCB5CF224DA17C14F22FC116CC9F8916463F2912C63F4912423D441F24A941D24299B25AB9422AD9443929245B84AFBA64889F122523FC5088492
-:8031800000000000000028840000001002008800005014008400800200200800000000001002AFDE041D242D24C4414E144A011E228CA2C112831E284598A88B4A49A8485984D28525352121482C1251822AD51A642142AF28A2525851209148448B481C24018B1C20018C8CB48883C2948218684A01BF8302200850824722130630242629
-:8032000008508425D6242181921D2AD8410428C843722483C1241B5223C8128904424501295321142258288183C42128C889D8140818424A8864C64E88881481CF36011D24231648D44AF5146248004BB443B1A86482CB14A1A9AA5A2AD841E4549A214E11182B4B29622C12419CA761AD41172148AB288F51847552157112E18422B1883D
-:80328000C241811CB2948238A8456184528927684DC3E221A4241A24D1E60D4014040026A121A3028302004443111A9498604445A824114453827223022928D182042C84022800C04442844A01838484218808882A048A94888240F8A9DF4062414144430246C2646182421183C44810C411137A4863818F4438854222831442914344483D
-:803300001AC2C2CA12224181027028012120A6211413C88248009882890A4A219AA8AAF413B200138222B218DC4AF12718121658849CE381082D961FCCE118B32AC448A6C4241A3248136A183147A64CB31882D32152248B124961826D81DA12F411886DB12C99341F81B684E421D884E48AA4248B411624FD86482CF2442858AB289018A5
-:8033800042841FBD0DB0168242C4A82534762364818638218919389C46D114226212224D182E448228A82D42C0361E218032141AB8523822B04181122151812C3239828223956848814C612C45283B84582220C82846F87A19001444284B148C41B9145242444E18144223F4168896D21835C8CF1438228B81D3641C1185B12C54128CB4B9
-:80340000147241C2228CC624857291244AB418D843EA23C8144246A434CC3281138A9D42184A48E282D4289A88522E18C22AF8A47710C648439122262842249228469416158234281283287248418864621A8891C12C2162218129F42418405442214E211588612619C8742681051881412C4A386243252164A88246E6454824013F1B0575
-:80348000C0480046548450221E4126084292A61404C30533D228E224E1421434388415A8686282201298E810888C228C01CA4138214E88882A4481A592809A8800128448424AF8A4B5200122009028894404682880046C8208490884A024E04802811218F04288121848182830118184D0429214281886384888848485024AE182342820EC
-:8035000081082BB52449014982628626446EA21E4D432263324A9144414CBA74082DA92249A1964CA3244FA81258288B141A4C2A7A18E6218AC451138681999A366C1EA956148998888B482E889E4A8CF914488931CA46B288D248E3C1288188FC6B5700C0121044288224C2482744488886884118DA8144C448AB244142178830215A6270
-:8035800022B0243148148754808288621211421249A1216A21614219148204A2608942482394462B14F04B94803225286413314C22412024824284286424192424C8181A2688E84413358145A228284D4110C12860282225312A8581848494C866821838221C4293442C048016220A81589FDE0D84009142301A124C928584875800278315
-:803600001982C812591154811D4826484812342180042608144D12420049A8141400321450121E45A1181C280148811212482123F235430000222828448044E819022041024120A44AE04228042AA42181441124454102221082052908281601329084100122201222022100F0E46DF0224CA04183011842848C822244A28460421112441C
-:803680008480082541C28284A0142B4884824E88869158228888129018134818582A8C08444A584284218B8148888864908A843FB20D82160817449522124244781481086410028B824488837121044D884721D0480484C31844162118210A8511214C280CC29822261452428420140880C441230327145F1E0712D01486714244044820B1
-:8037000024F18245802CA984134422048A0122824C41210628882A08460800882885021C0210018882604C2928186288211220A814821FA2027044820412466822246C0484810089A412F042984002684081082542072D2123C46425928842D430882141844D8850824B1484148450840060A190128400AFFA054111162526225184001889
-:80378000152442010029123118281004A9EC1422218444B84808260846028002144A92184A32222014922841844220122824A6484822814F75091E488CC2484004426648C22A4227442B844A03121642088604904614182288224418118A61162541618421198482081214428084E82498212488C82E848800982DC42AB8F649A261DE22FE
-:80380000DD3443B14142324256C8444786CF34F96B884E84CE822B414AE11E4AB21849B84838E88F8CF8C8994F14C821484E84A1874E27288F18E68A76C8A86C3592818791ABB84CF4C8899F81A42C8F24572A8D842DC8896A45CF88A4848F83A8C28FA4FD12822CB872CD9F887FE50F4554CC26C1356D514F419418657428926292346505
-:80388000018F86FB33E213B1434D6C4C2B124D24D06654611BD266FA222B4B481D8AD5E1E6D122B8147622A2428914412396216E163E8213A1F8472C3E2345DFB3F86286253242E78480B5D64198488F82B5530D6A712121F1694A8743AF86F3246C89F646289F59F123688AA6482B514114ED52C7C13B4CCBB35F1992C15F42B611B2A289
-:80390000761EDE41B214F461AE4D512EE41938483D131968482F18F3A6A21F84F418893A24D88974A269442D2913B8C3144CA1498A22B8A2228626A82C2B2CDF764A022C410884002E12400200308440084002811008422112301811124044614423422442844144416412481884188238482C53842847882841F0C24FF014426F6451A20B
-:803980005D45BFFCF47A1EEFE5F44A5AAF44F768ACCFA6F64AE28FF6FCCE4CCFECBF63F3757F67A4E5DEFFF9DFDDDFC2FEA58476F3AE8CCD296F75F537D77F5BE74BF46CF45D16AD32CF93F224222CF4C7277F28986F8F8CF66D6DDD6DEFE6761AF95DBCDB8CAFAEFBB2947F75F44E79AFACF5DA9AAF8FF9C4CEEFE7F58ADAFED48F4DFDE5
-:803A0000E4C54FDD4FB256F6246C955A331F36F476566FE7F4667C8F46F76CFCEFE3F7EAEAAFB4FECA9AAFACFFF6F62F27B7C6DCEEF16FFFBF97FDAFECDFCA7ACFFD8E8CCF98FE4E6D7F54F4D575CFFBFEAFB5CED36F47F3849BCFA2F685C77FF9F797B8DFA1F3D67CCFC6F6C1F1AF26F6D3E1DFCCFEF9B2AFAEFBDEF67F7DFC4E5FAFAE28
-:803A8000FDFA9AAF8BF9E4CCEFC7F54E5C2F4EFDD8D4EFCAFFF79D242B753E74167615F94B432F27F31A4E2F65F47264CFC6FBF8FEAFA4FE48EAAF8DF4D8DABF95F3FDF7F7E45F68F8169C5FD5F927AD1F56F86432EF8ACAA22B647F72F2B3614F4EF52C24CF71B28AFB38241FBAFA64661F11F793973F1BFBD4759F9BFF5163BFBEFF5EF5
-:803B00005D7AFFC8C63F2BFA92A27F64F586C48F8DFED8EA6FCAFA58D22FA2F4A6F4AF8FFFDCF8EAFB1B77B054F73C362F61F33A2FDFF7FE7E7C7E6C7E66AF67F66BFEAFEFFF6AEAAFA4FCDA58CFEFFDDFDEBFBFFFCFCEFFE9F96EDC5FD7F9A5ADDFFAFA6429EFAADE33FE4B6B6F41E3CDF6E47EEF5EFEF8E26F4FFB81961FBEFEE1E3DF04
-:803B800059F3B3BC1FBBFBD271CFCFFFD5F7BF3EFFFFFD2BEE8F2FFFB3A37F25FCC7D66F4CFCF8E88FAFFEEEEEABFFCF6FBDE2FFE878CFADFFACAD5FAB0C2A01001C0141844112266188400816488204824200134814E1440290834288000040012901241A448244224803248E480000202924D8BD07604141001E6442004C268412AA411B
-:803C000046023441181E488524F848A415521841D081C425AC44048B2426022622D11808428CF268134860888582324841888C84024E82224A2912089F33012CF4112485F2112483F41164AB141F41B24AF18164AF269921AB9451AF24B9A4F44A914B4A2F14F92448AD914F82D418FB244A1CF8244A16F1245A87193FA265596D5ADE24B9
-:803C80004FA2FD91246DC21F49522E1F49B26EF89124EF16F88124EB941F49B26AB911B24AF99548AB9443B34A39342B94478A2B944F8284F9244A7F2F092D481F4196121F417442D2C1F24A12157444F281248F6491218F243B81AF2423E8147185F84A1755D858F92748AD914D524E814F82C9816F827488D183748894475CF226C8565B
-:803D0000FC26811FC9362E1F41F66E8116B46E49F46E911D24EF12D941B44AFB8528AF1431242DB22AE4442BDA62A3422DB42E4ACC08862808000000004400000000008082018840040000000000002400400400288200005012F01288001845024AD24832442260148A04884249582C1AC23400836A86469489284D221942E13862224A5D
-:803D800039284AB822284181111821641990582984E618312242404AC842260283220912DCF4CC9230248A528243011D12221532454998221C825414141021048952141822461487842143A4142812231224224221532E502430242849091C54186C2C642218892888042A44A182DD31C024EE1A85341660924A9221153445491A21661441
-:803E000043486C13188072218693641EC5318E66123A782422B46219F9824288836112422E1A4589749401C3A624493B8413E68244744238284AD1220A89E62188C211CB681FCB06000062161406232438422888411410B224048489C84840C824C0211186A112A0122843820213011002211221483C01148A4402218488004800CF170659
-:803E80002602452181018128144860818714C012802982210226581855C825264A01144988628252C81225022D1112008D82482A811228882989012C0830844A392428703304414C618A2848C9332215B418D662A2292A28D848694C4E2C8F1264558E644686B614A42C82007876E842C8324B142CC1882CE312A4255B218644F821D82E93
-:803F0000D170B811288458A2487042A82C16F4284616921869222CB488F2D69B60426391A138428313126484442A281169884B1423C68126C14490224CB2210CC0282323521428481E289A642814213B213918F8B8411B2886F8C3388C82C688A1D22C68812A98142514129C622E4448843BDB005084204194281CD221A34229E188A28498
-:803F8000438158848B5249853B64488C15D8C1C825C0418B418AE248F1122410AA255A824794141280058001801822212484E88482B18291948828A26DE940A161448400001A0228C0842ADD41B1884128A4A118C01258148C11B88884A2414382BC188211088A7424B841919822142311448492812C236842421AA841221A2828811424F2
-:80400000F13C290048290218488C8241E88291983944248284A225188442435EA4414E2C18200889CA18284811182A6422844200981089B458180C122603468882180267822021F9DD740010880141582C222404894308814182214144158808200245410420014B428E24200182221A044906830A250248C8002D884441424AC82482F084
-:80408000C3C3002AC124838121A461E082A4521E28278186A8144D184CE8222DD484E844F161884921F544282618D8413424AE481684BF5882A3212AA41E618289AB423C291678C884197A22A2144685A484AB498AD242082FC4C2448A21F8E1394001A10044811A92128488190682466183811238406488441100812061820046D58408E7
-:8041000080C2118001495141228CC6811684281862812841188A84392244F037A4004C1128010040249142814212282094C28160885800482810E28234422223828BA98240982488C028222884008C11B8882148820180840120D1270C00D04AB2280112104981884802121988084694A148A88D84C0241668828C1264918E1894812904A8
-:80418000162428D848412201828A012C0498248B1418A20018A60224F0258BA025800200668424941430388880281E011508199288938215364212C882220085214121410114C2144214481492258146014A01428C840148004F560D250B4C1468448114391312480190294604A0168889418401442A0D2861212189924229144AE2142298
-:8042000011444808269544D02445410228004224B240044B49842F6E05481200324A8251180089A88486C8C13018882228428C448808208464152244304440048226688A4C0A8CA141A2A884281618280480A22142482A848282E275054448482C0100221480424404A601008008C0424604C08120448125228804208824812204103482ED
-:8042800048484622E11288A84129288108AB8520F8219F405224000000642C0225042824222214502888481410084018452268A8D028222E042014280220444404118E28248008008800486DE62068888381142A114524C1444981230112181212382A21012082582A1AA43898E880011452281880842104424CC3222822490B7822C01244
-:80430000282218A01688FF340D8CC2224D612D2414853428848542C12144A028848444800828222B12812D188A8218140214886601C088481E41E016084141942F84C1186C042441244423644820842118F8ED4524F0C418A5BA12A422B029D1B2C243146B6A8F88A28887148B593338218A32814A9929CEE89588F524682D3289C5A82FE2
-:8043800014D4184AD38AF588C81E744693648F9DF82814CF58E42CFB1841484E21CF3A7D1A77237218F1E19827112981F8D2122D822F82A1861AAE91CAE888F5C339E04764294742CD16AD1D56A44117461D181E12142249B48198212E3886E2169448178A4F8C38188E3446FAC886C26E234F48F434A61F62A49B4AA832AC88A68D388876
-:804400008CDA98A41257414B824A82A86429D448F2881A2A7672A2826AE545A4414B1E6AB414968ADF710D1D222D241CE382A2418D284D2589514CFD6499B952D92821B124B858C8D41AE1C2BB18B222A5122EC34742218F8224F17A1383B842D188E67A7242724AA18B1B12F084215A21E284A2268E4416FC4478CB194E3A2B414AF8D191
-:804480008C184C26A1A8182425A81222DFAB0611411110B16441784422314416286481231474423114271443591243412191281110021941144314429412152452811011568110A18215A8821110841284528428458812A4241F7843F3634337B497A16FF1F448C9D7C32E233FF6F643443F7EFBA7A32F8CE66EDCFDF918B88F7EFEE3E792
-:804500005F72F625A94FF6F42F6DDF9EFCA8B457717F7CEC8EF771796F63FE7EC29BEEEFCBF1DD4E6FE5FC928A7F58FCD5C15F1DF99184CD7D4F54F45775A5FCCC8DCF19F99FB54F21F11B339F9FFD1896BFDDFF7C5E6B9C5E568D5CCFD2A199CFC3F19C9CAFA9F8A8CFE024D4B3741B7E3AFF5A499F15F561623F32F25B5F3F7EFAE7E5A6
-:80458000BEA22F2CFEC5D7DFFDFFBAAF3F7EFA74264F86EEB3F26B61FF9EEE4BDB57F3C7C5AF86FE71795F77F73EE2FF5EFEF4FC9FBDF62AAAEFD8F8A4EC4BE85F9BFFB5A4CD3D4D257F51F75F3DCFDEFA94F5DD7D5F79FB1232AFEDFDDBDFAFCDFD3C3C4B557E74BE945F43F314168F86F5385ACFCAFA35C7242F27F51756E7F1EFE1F1C0
-:804600004B689F87F63C2D9F51D371F42277BFFBBBAAABFDBF94FD1D9FB9F9F4316B3E8FEBF963788F97F7EEF89FDEF7E4DE2F6AEE22FE73533E72AFA7FEFFFE9FBBF3DA6BAF23FE948C9E5A2F49F6B1F4CF59D8CC53A93E3A5D254F4FFF9DDCCFC3F3111FAFAAFB5A788D985F3DFD36122F4FADFF4BDB3AF1BC9C2B37DAFDE8F8BF3C0BC1
-:804680001734BF21711AFF3A1EFFCBF33D3DDFE3F37F7F7F71F53276AFCBFBF8FAAF89D9DFF9B9999FAFFFB6B17F1BE7EFFF33B8CFD7F77CF89FFBF3ECEE6F6AFA2A6A3F37F77777FFF3FEFBFBFFFFFFDEEF2F22FAABAA6F6BFF93759F43FBBCADCDBC9FA2F2393B4F45F774F4DF4BF7BDB58F67F3FAF2FFB5F5DBDB6F2DFDF6F22F4FAF3D
-:8047000077CF8BFDB4B48F8BBBF2FFB4F4CFCEBE4E0B00219012004041482108402108C0249028E0440242200489122414249482100488004880C4828C0448C0484448244880140844821F390C234224028148221A14E249041A869845984984B31484B83484A848708408B048824184AD2C188B28184C822D0996A48284184C0282188427
-:804780002D828A44024449044781008921FAF1F4D034F411248F32F1112487141FC1764AD341B64ED141B64A9961AB945B41AB945F82F44A915B4A2F14FB25482D915F82C4914FA2C4814FA264154FA2641D2ECAD6C55A9E242DDA1F49C2431F49F228131F49F248131F49F24A111F49F24A111F48F24A911B28AF14B985F44A9143B24A68
-:8048000039242B94478229F92448984FA2F44E27D032C5688D43166C141E442F34F1116C87241B414E861F81F642A65B412F24BB35F44A835B4B2F34B235D412F837482D815995987BC256F1278846F1269887196D518AD296F581286F32F591683CF191444E131F49F248111F49F26E111B282F56B981F24AA513F842A5B6F84A34B22F1B
-:8048800044638A2D34278A2F44E382F17F9E402808200400000000200100000000000041004601400800000000400428800100005012F096EA3024216082148041110183081840786832188021228124E1421C21041304814038241843281502A01483498822852204428280848888022A84321428BF570EA01A2081C42181284828428953
-:8049000041A81C922014241C088742C881214322644292722026812401172226884888A2432908212022088A94A84A011B48872188601849F4D65640B4C20389934128830148D0843818221A8C992818415A18682187421AFC58A211438CA442928C011B241216D148287542C228884280134282924422AA84A8488A8284E81C62212C022B
-:804980004F18A125DF770422000011902114284290181088344A0022800441200251A04240C824481290210089E18932488AA2140000008C840940A8842210F45C2D004441282981044842481C48988800C012498441C8810048884F82842202840012242822806848006622A184406288814824102208200480F48F3E20E1222112228406
-:804A00000241159A848C611460441B843F44B2292C82E846B128E4120426B149024944A4962AB4352404684324D42119C43183A4161422184B422D881C93C388C82E548DC24A0249A42142A826F8D11B80C12449428221064604238C283488E0147866212A26386CA6880246619C68102469821E254812482D444A4251421B29841A862473
-:804A800082614489F8922985818838268DC200442248C028AEE7001602292204009344D41811094904D029152481C1411C04282845C864224A22240420820292884142702182A148282124C848425821AA04424A018A82F4D74D001D62201211180184141004224849C848428E4244004168188152468429014242288044A82C224200204C
-:804B00007222248104221A2C1902426C4401003FFB0E4C846441448400CD2142188261126A214121D214618116D82181284489098629A1422A244288422822C8181305411892382584318321822E1120048A814828BC48C22883F3B87D40021008228001200482004E18001442848120A842242200800820C8111822C08122A584424148EF
-:804B80000110180884AA24048A1321283444EFF70D4924624183423828302400C6028081651C10E481984E818849E486A8A485B221A441981A223A48288E282E11123228C022CC21B12151C213A1184886C8111A8431224A883854484A62844CF2AAF74012114244011417818334110098487014B848B2116414121C410811008311A424DD
-:804C000048402104800C1CB9813244A08260224C5272444088E888A4841242A698822788288CF41B3B80824102000040484431210010846E281029240284420046084213028994282A042220362223024222228888428800221225822202826FFC43021024444828220128136281C081467111A642188119011881548E6410081200129C78
-:804C800084311212814D188332124818888058144448182A840829152826088D22422F28061004472210241444D81404204404282200212113820211000048144200000042008002A0486200208C440281248110F8B83FC04162480022142004004348624800001B21803185484C3132114A41011002284009101222C84280480844348CE1
-:804D0000128182088800422A18F48F8320A241248236280681222008400128200CB04122042024044242001C2205A0241228001A0468688082892804280062200610F4415600802421044642220415426314822C42021284701218C448004018111101C0213B144A018C8285A2142878004A3244284384A28280F54298242642829882F0F7
-:804D80003E61C04400224185528422244D120083D882631C49E44844E218038260184F14FA813819C262901820B48811988829D2C2088E48278182491822118109002810280A12C28420A484BEE520A8280000807428B241020048002428208282420400111100800422482148000020840280C424200422222B2814426814F07D81400840
-:804E00001C042E81420014404A44C622A04800228240B142818881A1A400333C1140110284C0414009248CC8824286420CA814420020280823046FC2072A22082CE444A244AB4483716AE382124178C38554131F24F446421A51A823C3783E2117D446F129844AE592028D5842A05487842B1B7E18290496528A1A614216A2C262E018E876
-:804E800084E54834586ABE6888B63278881223B422E614EE48F82249004B2F244B2296F12428151444985730118D2295268EE24222E4126B181449B58CD445E414A421481146D11364249C8274419A42CA139828603C4A88F582381D6289FD44242A182428A828184AB7229BA82F8298888718A1FFA80E3F448455142371281828926268E6
-:804F000046F52A872591C42F1899C4674B88AA3E821D32BB8213A4B2AAF8842A267149E2153411881F1134B11E2289C62217425E284F92E127B22AE429B66222A488EAE222A4281B8629541148EE828522E52EE4282624B244F4BE745041504150412115EC2241C492842A4188011C0134126081441688420AA4402AC81A821882308118A3
-:804F80001748184489111118911A11A911911A901A008C04160884F0666A70867444E572F23777F7E4BD291716D7E1E7D197341F2BF9BB813737BFB8F857377F4BFA75E4CE829F19F8A1A98BE6DF58F8141DC7F8EFCCFE68622FA2F41A1BBD8B8F35F99393AFA6F6A28A8FBFFEF3B36F42E11CFABCABFD7AAF9A7A27F591EB1F91F16B6960
-:805000003F3FFF77D83FB6F27A9E3F25F45AEBA7A62F2DF92A3A2F87F1BABBAF8BAD666E28E5FCFCD3143D419CE252F2252737A4EFC474647415F45C4D9F15F1B195BF1BF873237F79B913F9B5A41F47EE28F889819F1BFA68E33F9C7C21F9CADE6F6CFCA3F93E788DCA2D831F95FDC1C19FAAFA2828BFA6F6F3BB1F18FD4445CFB2F2AF0A
-:80508000AA8F927227F5E1A927A4AF87F7EBEB3FCEFE73FBBFD17B19F951C22F26F4DADA2F27F7F2FABFA9F9D2D28F8AEEA2F21C1E7FA6445113685F21F13336A7948D2AEFC4F26576AFB6F6DFF5BD2F3F98FBCBAB3F3D5D756F78FB66F63F1EFD9A921FBAFB72D86F5AFBCCD44FCEFFE4C63F16BE28F4511B1F11B1D2F51819FEF3AFA351
-:80510000F1786A2FA5F3F7951AF7392EBFA1F3F6E7AF8FFDF2E28B332F24F2E9EAEEC79F1FFF43A19F8CE914AC57CEC2AFABFBFAB2AF2EBAE2BC62B6C8FE445ECEDEF0C64489B215F12126E7D48FA4F64B299FA6F74A6BFF7EFE1B392F98FBCBABFFECFC92926F78F966F63F17BF9AF9B9933F97FFF6F5CF3BFDACE7EFCEFE71E19F33F7CC
-:80518000CA438F91B1D2F599CB2F37F63838AFAFFBD3932B554F41F5B1BEBFABFB7477AF8FB9F2FBEA22BFB7F7F1F2EEE38BE6EFA5F9C3911BC48F8FF788AA2F23F3F8F2AF2CFCCA482BEC8BEC4FC4850400002484002008400200288A840242203481422014239481A0824288429820022D8248141A84A848341A44A3413492200182001D
-:8052000028B0FF052061228001004048110111424120C1121301C02141302100008094281828A02989A1282A012C814281D21281022024222412223A420049D41B096D431F41523C1F41724EF11164E7141D64EF14D1C1B24A9921AB9459F44A9453F24A9153F2429347822F14F924481CFB244A1CF8244A1E214FA264192E4A96C54A9E03
-:8052800024ACF491243CF4912487321F49726AF19124A3F48124AB141D24AB961B28AB9453B84A3924AB9443BA4A792498BA4F8A94984FA2344BD0B4E441563C1E64C5E1415236CCD234F1812C4F24F1812C385788AF6433A58F2431254E82478A4671B258124F82C5816DDA1EA14F8244F122C886D592E458D282E4C9D236E488762CA1F8
-:8053000048671419B242F881242B141F41B2627811B44232152B2443B3423824AB144781A9FA2648A9F1A458C79400824800002002400400118200000080018800004001E082020000002400000000100800250177F2A048400210840442220000842022048180020010218282044222004041120430422004920020281202CA422228049A
-:80538000F082DA008284122021280214800247184222122004008004284002281412804484240211008002280088002004110040019F2F0442C28112008A041001282694858C24A212484240022001A211242042B141015048484A42020023044230842002822823041C4E62284214123D6A00400260418022840200000000842002480086
-:8054000020828204808204100115040028808201880000000000F0B5D4C01219020000154801008024041822420000004800001284004002800200200481800800002961810090444F65084800184CC42146C8228C6112000000888081321166C4842880022008001884321A8482B88261844C6388241548A181228024044E880028826230
-:8054800012E09102481902124414465818A5912100004280818225C21149140420042008188412004840A22981328908851181812208008948022A81882431445F8C0F1821004822208201002004200800802288022800000040A8121229820842414082048C08802404422011082800B7C3001004288442000000200400100888400800EE
-:80550000800229022C06C08129220220014200284830810081000000F0BA758042022444160112810081800883012480C41122800244802184210880061820011A02C024848AC18800831104884A0820A48448F032E90019021001002843661A00810040810122204201000028C0281880010041400200001800810030281800002F6203BD
-:80558000282601241742190112224996A1008C8884013480A4212A088440041262248889829522181B812322132441024946A8818688048D118140A88428200448F06A430010064028048100840040088041480128130200002A81022848000020220100202201824480088112A048009F6D090000800100001001100800000000000000E9
-:8056000000000000008840082200000080010000DE33000000000040020000000000000000000000000000000000000000000000F07864000000000000000000000000000000000000000000000000000000000000FFE40F0000000000240000000000000000000000000000000000000000000000008F47060000000000000000000000A6
-:80568000000000000000000000000000000000000000F04FFE0000000000000000400400000000100200000080010000000000000080020000DF42070000008400000020040000210044000080010010020000840000000000000000006FFE0A001008000044000000000000000000000000000000000000000000000000F0D1FA0000003A
-:80570000000000000000000000000000000000000000000000000000180000F01B3E000000000000000000000000000000008200000000000000000000000000709B030000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F09
-:8057800000400800004100004200000000440024000000100218004008000000000080020000AF1D070000008400000000400400210000000018800800000000000000000000180000B0FB010000000000000000000000000000000000000000000000000000000000F04FFE0000000000540000484004002100440010021880880221800B
-:8058000001884008000028840000800200004B11004001008004548588022148400428100240042810828401882810828441848842188204441828842148E041012810A21140C435000000140000484001000000000000000000008002000088000000804208000000F04B57000000000054000048400400210044001002188088022908E4
-:805880001880088400008042080000280000F0A3C6000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0010024001008004002810020080020000800280040000800444800221484004002148400400214FD4080000000081
-:8059000000000000000000000000000000000000000000000000000000F04FFE000000000000400100000000000000000028000000008800000080420800000070820E0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000008002000000000000000000000000F07F4DB4
-:5159800000000000000040010000000000000000000000000080080000002884000000002FDBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8A
+:80000000100510011400008018040022141849844808204104222C081282400220811A28512285111213010018848140582257EE5089AF44A444831401143028504C55B42DF228242200882412242552221AC3139AA888C04440D811D211187198588CAF14B441A49482254202004554444B228B2222801842042C348265A213CF210B3053
+:800080001200214C0100004001141012080000000040040000000000000010010000000000008F2705818C2484041021024014E448722881224808005022102291142AC88400181413486188818C2484041220024016C424378228008112002490122F1F0E84E02144018011518114924480220800002012129414828E810081284041029E
+:80010000A48004214112002450418052810000001002EF770380040000004044810281000020180218800A280021140084804422013410120244800221100800100218BF1D062100180020011113080084000080080000000000001002002410082400145021424008000000F75B10B8482424041100004555444F822A26060000242542EB
+:8001800026019604430822501111118558888B4452420010420245544C4B222A362100004002241AF1CC95008D184C8404000082805844112A0281840000242981A1112A88080040521121508848C8240010020045042A4202442002212512F29876241800000014004019111A01C084120000112828000022200140024C1882C2120011C7
+:8002000011114018080000004044F474F8002001238261110012000000000000401404812244000040020024000040022121102801810000002FD50F21001012412143482119718111234402410000004742441382022229031200106249822D2223816122100381214008814112220000DF5A49228121711203410014118881401128584B
+:80028000888C08A0880045014B226042100840022121405222C012A11003213181467B4A012508000010F448610023C11480A2111B1115019815C18189784878810910880180124404C028414504228048C2822400185014242124241543411219810185080010042FEC0A6F22F212222E122B11122B11C0132592822F31F111119B888E32
+:80030000898F84F888418F8424F4414915C1419558884F84F448444F42B444F22424222E2480524445E642F326222D222E122B191AB88229C8122592831E111F11B189F991898F84B888F44848424E4880548885F844484FF6046F2252262AA1131200182592823CF1111319EC89D988B888A44C4214158154819588F44844C5B444A22291
+:800380002200405444286F22D226A8123AA1812B8882822592823CF1131119EC897818B888A4444200405888483F810B48420000008024040000000000000000000000000000000000000000000000F09359802484240420240400000000000000000000002024042084A4444200202424040000000000002FB80B484A04484200420020A4
+:800400000400000000000000008004428024240400A044004200000080088200004DB1800480040000424242000000000000000000A04400800442004A040000000000A088820000330948420000008024040000000000000000000000000000000000000000000000F09359802404000000484200000000000000000000000000000000CC
+:8004800000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093590000004200000000000000000000004848000042000080842404484800000088820000E0A40648420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000006D
+:800500000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F09359808C
+:80058000240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000B6
+:80060000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B484200000080240400000000000000D9
+:8006800000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B484200000001
+:800700008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240442000080040000000000000000000000000020240400000000000022
+:80078000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F093598024044200008004000000000000000000000000A0
+:8008000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240442000080040000D7
+:800880000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359C5
+:80090000802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905484200000080240400000000000000000000000000000000B2
+:8009800000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905484200000080240400000000000056
+:800A00000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905484200007D
+:800A8000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F093598024040000004842000000000000000000000000000000000000000000BC
+:800B00000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000D4
+:800B8000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420054
+:800C000000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980044A0420040000000000000000000000000042422084840400420000000000000000FFBF07484200000080240400000000000000000000000000000000000000000000AA
+:800C800000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B484200000080240400000000000000000000000053
+:800D00000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935900000000002004000000000000000048480020040000A0444800004200008008200800BFAE0548420000008024E4
+:800D8000040000000000000000000000000000000000000000000000F09359802404420000800400000000000000000000000000202404000000000000000000B50B200448420020240442000000000000000000004A0420240400A04400420000000088820000EF5B074800480000004242000000000000000000A04400800442004A0442
+:800E00000000000000A0888200001FBE0548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548422004200442480000000000000000000000000000424200002004000000000000FFFB0C80048004000042420033
+:800E800000000000000000008084A444004A04004A8404484800000000008200F03D2980240400000048420000000000000000000000000000000000000000000000003F9905484220040000480000000000000000000000000000424200000000000000000050BB00428024042024044242000000000000000000004A0420240400A044BA
+:800F0000004200000000888200001FEE014800480000004242000000000000000000A04400800442004A040000000000A0888200001FBE0548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548000000004820B2
+:800F8000040000000000000000424200002004000042420000000020080082828FDA0720048004000042420000000000000000000048480048002084840400000000008800009FAC0E4242004200004820040000000000000080840442002004000020044200000080280800009FA904480048420000000000000000000000000080248418
+:801000000400008024040000000000820000DFC506004248420000484200000000000000000000A0440042000048428084240400000088820020F8912C0000200442424242424200000000000000002024A444000020042084044A24A444420000008A280800F03C62802404000000484200000000000000000000000000000000000000CD
+:8010800000000000003F99054A848404200400004200000000000000000048428084A444484848002004424A040000008A0888888888EFF7070042004200004800000000000000000000A044424A84A4440080A4444A2484A44442000000008200F05A1800008004000000000000000000000020044A8484044800004248428024240400C8
+:801100000020882808001F4807484220040000480000000000000000000000000000424200000000000000000050BB004A044800000048420000000000000000004800800400008024040000000088000080B8590148428024048004000000000000000000000048428084240400484280040000000088820000BFA20142A0444A0400009C
+:8011800000000000000000000000004248008004A04400008024040000000000E0AF0A48420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905484248004200002004000000000000000000420020044848002004202D
+:8012000004000000820000B0B50148000000004248420000000000000000000020042024042084048004000000000000B0750E48420000008024040000000000000000000000000000000000000000000000F093598004200400004842420000000000000000202404000000004200200442000000820000D0530820042004008024240470
+:80128000000000000000000000A044004242000042004200000000888200007FAA0C4800480000202404000000000000000000A04400800442004A040000420000008A280800F0CEE580240400000048420000000000000000000000000000000000000000000000003F990548420000008024040000000000000000000000000000000013
+:8013000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905484220040000480000000000000000000000000000424200000000000000000050BB80240400000048420000000000000000000000000000000000000000000000003F9905480042000080242404000000000098
+:801380000000004242000000002004004220040000200800003D85004200420000484200000000000000000000A04400424200004200422004000080280800F0FA2F8004800400004220040000000000000000004A0400482004A0440000000000008A280800F0D49B802404000000484200000000000000000000000000000000000000B7
+:8014000000000000003F990548420000008024040000000000000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F990548000000004842000000000000000000424200000000200400000000002008008282AFDF0F4842000000802404000000000000FD
+:801480000000000000000000000000000000000000F0935980240400000048420000000000000000000000000000000000000000000000003F9905A044000000802404000000000000000000000000480000000000000080080000F04BB2802404420000800400000000000000000000000000202404000000000000000000B50B480000FA
+:801500000000480000000000000000000000422024040000422004000000000000002F57044800000000484200000000000000000000200442424A0400200420240400008008800880F8F4F78004004842008004000000000000000000004842800400004820044800000000802808008B7A0080240400004A0442000000000000000000C1
+:80158000A04442488004000020044820040000200800009F9D4D0184008CC1484149E422247824214861484C0A282C22E121120820083121883121889881882042490184484548B82638A41400C4C0224C420624122051828FB20D1416D381D129D4411464862648F424418092348415D22542341E57A2881B1AAB1896F8421249A81A1E13
+:801600002533F118849F48B129C12986446BD2113632189DC25C1CAC4A4B5242296443325C2378615684248B121E2E6AF12842894128F56AB80000800148842C2268128A3221601841C01854239111848341022822147D8282119312480A80820121806821464284020028E4008D24304A218981F193A14061211941924800483041448085
+:80168000D14808112C2212082528082B41411004124321A28144112685C211218998880049C484821C819111896814284489122207890189D4AB084001994411C42826440400000061641A826A221282408249B11248581882004048011142C04C8924022841C0244110024418200124E0E60E4018084483140448260440044D222200009F
+:8017000082008882152201008C018288008484111744302481224880021004268201212200247B6F000000000000000000000000000000000000280000400800000000000000005F2B0F19414261C2114E2114154421C48129224102302820220216042C728428022E18872286D842C412224CD421210418162C94192495145484261852F7
+:8017800028701802296224248C0849A4812CF82A38108441522148831178421A9828121421256814441381721258225C059241482443562298E082482821812212022642189241AA219261923C117114938420118601182284412FB44111612115C22D13F42148248754A18394812229119243411782D022211263418828274C28418D1224
+:80180000872287288B48802321C14200ECC242181394A74145E88211538363D1864982624429110A43B61888D86D044901002112850114282C11018400182289024E1480111448A2242322094CC21A90441932228021115881608122198628011124C01200821800412FAE0900003411181004188424009260888112101108608242211E7E
+:80188000242144222888122B8211002D12160448002412872480015084420010088F840A1B423D1218B014C2187C72249A58AE581C24C2898351141558C12981D84178212883C2814732001E24821E2127832741848903186C7821988C194A6844C3F1D4222E188C240A1221A3E122C832433248424982064E49805612002289D125119418
+:801900001CC6A814C08812411E89159882833894841484824483024C32942F31922C412688092B1A74118522628148813E828C2104462A512200209648404408EFA604141223014D131422AC22A421118C42434801448C01111C828342C121212C242102122B129028188068824CF8811241411E44468412B8820380C1188E2247832504F4
+:80198000422268F0BB1FC0287C02482424182100122244E3561A1C8228216121111008278E284184222002184311B122E4846282144C5424B04463924C616919C12200002722D04A41CC648185F2688A508212111B41008416044C948142CE1422580046582B2082A4122901458191661D86100100002784001221C421902244C68A429836
+:801A00001290428008288448221F34064830182841CC9141911C4288844141012444612012D884080084141212168251825082414711241D84120028944B4124284008812FC11204C921128201883FA34E0336158201C57241C219114628A8218E52142D48308487443D1828931214088C42751463C19E27B02351822C3114644B412259C0
+:801A80008AB1145426415C34251AE22A21181A7A1298364CC42216BC1662423889648ABEAAA042D0189121452291184422444E1148144D481C31212522412211E2888443A2842E88882A04180040186132101A017028E281F2481244211F8104008425028884A14D48005FAD0B200100205248448068883088151824382886F411882D81D2
+:801B0000448215144818413811824012088064229C324485C238D0826324264851821800448C43C81881282280F2F1DF0011E045420481001E84130110C584880028224119140218439812240016011A88243311A124152892818308178848C111000024009012458811F46D1600615012501428135281182119A3818814211CD124618180
+:801B80004400181001005018C04800111AA81813B18802102118411102402101801288014048F899FD80829248504812449042148B242426044941022531218249712851213E42411C01A6C182428C084A1218484881021B2410D22101B0414996480028C01821288004242FFB0F118140C831005C220211149441282484824D831181C6B1
+:801C00006889458118C81200200250821414248142208121341800272184111442002250188041E1D90E16A8242C2704288523018078822C8221212A31241212211833A28242400122184364A180A338221800244D212B822D21282C238184C12820E12221120212898122F2C9B400904800212180C12A49241412938815E8180200008062
+:801C800011082061184A88111288784222042C4882880482883D888280820528820022224810F8A88B209313288436681148184225412AC281122C02601824818B81232892481C8618B2188C52188B481A223A32412221001528981143942212281316648114128120215182286021CFE60A94441AE4111241140584C4184C84042194283F
+:801D0000409824112A5122244447144B84671243A12125A1481CA1484098A1C82E814A088304488289C414484AA21448001028283122708B0E266247167241117112E4C2525683D44871C458A19E816D886DA1B7421DA18C7838FE87283B9128AC3B144F44F21C81124D611AD131E8F461A3ACB15AB421062E331F22028F36F6A284841EC7
+:801D8000E2242AF331883914F818511B1128A8278236C8322DA8878236E922F2D373141E21B12AB216E1129325F021222CA4211DD1299A27174199C1831823B285C994B48C651B2D383924D813F19A981F6AF838488B4BA0A82E2896F1311112AF18B84EB281F851393F397221F84B299D43A7484E3A3E181784E041F1381281A1853838F8
+:801E0000527018F82D3890114D318D188F82761CCC11F7141E185D3857B8AF21F2E85183E61861EB8638BA5F78C3218733C7489F5F18F161C78D891D4E4636212D21CA91818BD4AB438E92ECE12CF6838816F8A1CB84248B942F5CA1DA2F89E83465112F440446A146842C832183C17438447F69040000008441200200440000102808400C
+:801E80000400000000420000C048C048220084200148208102002021F4FCD4143E123F97F3193B2F12F62C2FBFB3F17B5197128F63F241C14F1EFF6121BFF6F48A118F18EA13F33A19BE989E963F92F347D9BABBB1F9E1E33F18FA81135F15F561A15F17F451415F76F36AE22F2AB36AF6BCA62F3AE8925A11288F2CD46EB8DBFC5DD73FF4
+:801F000083F72361FF33F12B23BF57F441111D612AF7A882A1242F22B392E986A7667E62AD17143E323F13F7393B2F13F23C2FBF93F37977EF62F1121E4EC98FFEFF696BBFB4D47FF1173B1FB3F33A3B2FABFBBEBF3FA2F2D7DE3BBB9F8BFBF5E77D299FB1FC55433F37FA77733F36F6773F3FB7FE3232AFB1F2564F2F3FEF22F61A181F26
+:801F800012F62923EF63F31B81DF53F21179AB62AF67F129339F1757911F11A1328FABFB22222F21F13A32AF29BB4AA7772F26F52151F034362F22F73B3B3F33F22F2F2722BF77F52F2FEF67F65343AFD7FE4941BFB4F68E95CF18E812F23A9B2FEBF1B297BFB2D357F1FBF81B775F7AFBAFA3BD82DFD4F46122FFBBB253F47537AF37E225
+:80200000A1331A4FE9F8E2E21F1256198FA2F24A6AEF6FBFEAFA9D9FBF97FF21318FF7F56A72BF91F2415146A176AEA2212E222B329AF922382AA232AF71074F63F33232BFB3F3332BAFF3B223F27977FFF2F37E7EBFB7F77AFB8FB7F75BDBFF78F1BE9B8FB2FABABB6FEAFABEBF3FA2F21F9DBF8FF779685F7AFB272ABD4BDFF5F5F333FF
+:80208000FFB3F36363FFF7F77A6B2FA1F31B2A67612F2FEF23F31A12BFB6F22A2BEF63FB69E1DFD7F67B798B33AFA3FD6872BF95F711191F15A5778FABFB3A382F23F32A388F89F93A383E328FA2F235AE4001186012844D13843492266189248214960817816C224834818113A8245048118129384823123822422D81C0118414C093600C
+:80210000221E4826031416080012002800F04D82A0181F4152221638241082B244C128241A52184026C123860845581892206254354A84644413A225A025214280D222086AC848218CE214891288828144013826186281A3A4432894BF78072D421F41522C1F4132481F41324E1D2CAB141D24AF249921AB9453F14A9643F24A9543F24A16
+:8021800091478B2DB14F82C4954FA2C4854FA264116FA264192E5A96C54ADE24ACF491242CF59124E5F2912483F4916CA3F6812CAB141D24AB941F81B24A19B54A3934AF4439242BB4478229F934484CF9244A7F34056D4A1F41762CB21134481F41324E1D2CAB1615D44AD941B668B915F24A84228F543924AF147994D812D282C4B56F12
+:80220000A2C5954F8AC481ACE558F2245A96C14BDE2545FA81288CF59164C7221B29411FC9362E17C8AB141F48F242141FC1B24A9A25A93934AF4419B4427B2498922F83F442844FA2F564E1008004000000008002000000100218000000400100000000000000000000001002BF7B07114712111213110385D4254321289111B0826161B6
+:80228000461884E8C88241284C18214204AB61CC22011A48F812222071221808861148C3482C011542181592428A054981048190284F9E08288A012641584815022192601881E511814243122811014D18412442811F42412554A12E882C021442142486025223A183982718001A0412248125022D2A26486411242FB30D136246C031993A
+:802300001101213D2411411C9111141ACA341518C688264442881942B18213E441723CE144D281B181221B1A297441421A083C011B2929C19161342A051821A94492148F24C22284128721CFA60330111440424C41CC12928882855284250123042196C81170485484801458214284508240A22121122282218A9418F04882001018158259
+:80238000C4924002814120F2CFB7200265032C01182814111C01A048141002850130144251104304814528044241422C8802440063B28114283848923440264104899244188022F2D3FC244411165885D411508116A2858988D1127112711438124498641AEA9885244978840810924429493C3223B3E211B44462112A817283081427430B
+:802400002E8622241314FA188213688427A24F261174A262424901F0EA97D04212811143066012B0833511183C21512424A08184B8481A8415348C140049341C89C4122AB5B4C44448222264871890234E148D2680244421514152442B144CB2A224818122F233F100505AC1934181113811C08810C2C19921410454218F1118845818242F
+:80248000101452288844230221604A3381210240B48322A828843F2811388A23582A89C224A164264404F0B247401812591484101C08890121168418F8188190128229140148188128A112118440D4410128222518594200C25410C8828C824231421882C0141622E288445428DF720746C9142D2421502813246882B048114834241682A2
+:8025000024C82412282168382D121024C1442C4852181211002146AC281C6244430222132224018B24444024952C882824288A81F29F47301200364254141A62482714618213012111104203832182488C34248C04303248224058484100002B212901304221110048122312E22408818904005F6947B3414154C25C431CB13754481782BD
+:8025800087418C5C1A124181C8803382AD321382FE1844469224837412E8413493AC6492439118854404448C127642342670258224244918D814D422141492AC2978280283C49489B29A01241A643210421C08272480214122C81317812D82511848002810B824880828210044807222021C98212A21A1846032843428428021A394484C92
+:8026000021B148220AD0F40C401442744801118C0480114201141CC1128460138A0142484B2C4B4812211820482882028AA11231430C9048884C34441BE142009741006301804118B42871C80B1312814423025034184400223881441482D08244911421008429886284244CE4444368848A2614E181321A44411222890190A2C88F440844
+:802680001863012AC428422218823FA90A25C212D02244012D4918000040840144C48905001961428002188B82178A89018F4438811684418461821EC816CA24008184008448CC914C28274100418516F456C720A424911A021902A952481952492D634414222E4189722212543280D2284488052C9844804421488101001124444A024422
+:8027000041131202AB1200228001450248C0423EDB60284840088C119441F0831840081C08241214A082418122BC082A28E412384244321014A82110081111141115B4832188E4115821883902188400438182E112F8F579409418121524015230114582111121911584141218421418211849C9428470144188642118228AF44428118C1E
+:80278000A421288A02004682A924841A046C2892E270428A62412342B67E0348444C0200222002E02208218008421344982288203221212800224CD88242114482281484088085C3284951218008104218342812002914F8C3561012512818490485865118100812816161C114C48031221F8861148001142C381515082CF844138445A2C2
+:80280000290011C11902118F19029011111281304829A1282C0281216BC660C1504181846C04442D4481D0481198648100168612C488412532841880D88448240848262118441884542246682564982C06C01646826284230660C463150421F01D44244F243492474149B1126421DB614D514511F411141592225C6C3143741A6A141E4566
+:802880004AB692A182167A12ED1AC2442B1245E544588A5AB14CA1A2EF15B448F8C4721AD368B124F219245E427F25C2843F81227282F1A1A21DC22F4C5C432BD287C3C5D2E885E7269224C752497B674261428557A2177485595884521FC5D35341E81498117B119FC2711881F119142B14C7324F22F814181F12B18DC4868B2A481B2E1C
+:802900004F1B7541B526E8A832842E12824034333B9165F925142E4D4B1B4F72C4861E4821A791197118D92452242F423236E7872B112E141E4A86FCDA84D012B165D519723A38652A7442772B1EFA2888A5F23A28C54118D6417A25F5862ACD2A3F8158194CB248EC26BA44E42449FA128A85B8A4FB894F3AF4184C1FC8FA34761E84D7E3
+:802980001E948FA8A44C8F888291218B1CDF9DF761925AA53C85E82675189C525ED84A626845344818A7266DCB8092142849810228803244284A084A48A8842288118120241808104194118110088100228426416812404108122641486181A88488908848A81A043FCF4AF243213E3BAFB2F23B7E8FE8F22F6F3FD7F77374BFA4F4AAA6B3
+:802A0000FF96F6CBD8BFEDFD53185F4DFFE7F6ABBAFF869DBABB143F9CFD6D6D1F1CF971A14F7EFAC3133F11E121F9CB829FBDF88B97A5F6DEE68F8EF4A8A62F29F8B2AA8FB1E2B9E9A1F1A6BB6F62F2E2F32E263F5ED233F35293AF8B7984F845EA4FE6B6C6E827B192EDE8F2A2444F4EFEC4C44FF774814CF241255F7652B9F7E4BD2F9B
+:802A8000FFE3F753541F71F17A7C9FF3F3BBBD9D1BAFA7F7C39BEFC8D8EEF14A58CFA2B912FBA8B27FFCFD4F4D17149F3CFBE7A73F36F2595B4F6DFDE6E25F7FFE5347AF77F6F6F6EEF32FEEFFD2C62F6DDD75F216145E5A6F2CFD22262F2EEFEAFF73757F78E72CED69BF16FDD6DA4F6DFDC68C6BBF2F8BFFA62C6F6AB4D6FD9C94CF6A62
+:802B0000E13E45F273566F7157EABF61F12A4C5F64F653543F45F12B3AEFECFC1A1CBF82F35B3A3F89FD191C65F61A18BFDEF58A3DBF98F8B3B9FFD3F3D4D41F1AEB7EDE22B862F66467FF3DFDF9E9DFDAFFECCFEF6FFECCE84FA1FE56427F7ADEFDF2B5BF9FCCF8F9EF7F67F6A7B71F4FFA23B43F74F33333BF81FF951DDDCCCFCAFB9409
+:802B8000D44F6AFF56748FE4BB72F326644F41F1A41E3FF84AF273565F71F73C3EFFE1F1B3555F65F773345FF1F11E1CDFF6F69B999F3EFF5A3A3D4BEFC8F8CECEEF87F7AD1F7F58F3E9AB7FDBFB3F3D4F4BFBC9CB7F7AF862628FA7F7F577FF37FFF9EB7F69FDFEFEEF6BFBEDFE6F6BFFF6627F7BFF1D3F7FDBFBBDFD5F7BFB73773F7A84
+:802C0000F9F9FD6F43F543F71F33FF1FDB7FD1F99FDF4F62F37E3C6F47F3AEFCEFC3BB72F33674CFC7F7AC8F3B96C0119016D022014D111E4824400134400744122008112048143248902861422B92816B823026302250249014124522098260890044128584440444F09E9610169118D01CE1414422511CD0280189018D1412348485971D
+:802C8000448DB1128F5432A146048B216B4214D88D21411A02A0D211472296681215088A521A1966221B41421125E688D428234A220B823886F85FC4F024421F41F22C121F41F268111F41726AD241F26E111F48F66A921B68AF14B985F44A914F8AF44AB34B4AAF347B24D812F924488D914FA2D418F8244A16F5264A87592E5A8759ACF0
+:802D0000F49824ACF491242E421F497228F2912CA3F6912CA3F4812CAB141FC1B26AD981B24A7915B84A7924F84AB24782AF247924B84AF934484AFB244A6F5D044FA2B411F42C5212CB1613316A44CB121F49F42A848E4489BB84969A5F8994AA4B488BB447838D8563DA58F1265A8D914BC28D852E5A87482E528759BCF49824341FC91A
+:802D8000E2A2F411642AE9C932281E2C29E8C8B24AF1112C2F46C82C2BB44F81B24A5984A97B24B8487924B8487916A8A46FA2B1CC048282480000000000280000000021008008002840010080040000004004000000005012E01F0BC0221508531601804181112128840112A48D838110C4644014880600243024844436C29288174100D1
+:802E0000C022002022880183622143180200D01CF2EB5190411B18242A014C91442501248420411FE8485381208192818922113481415991281911D84139282B81D0123142405C8230361608C06927888044064F2814382818C542286411F063AF10B1E141A8211D6419C144141814C34101C7348B21281651281E81A95221C9B224751289
+:802E80003485C3B825C12813011B8199B23648D82F21B54258862D15F012248428218B246388A24A4D12D02422318A18A4244216311A972D800425034044020021800930948110088800002004404814020022128884001800118100008E488143121214083024EF97082011021C11011A62141B411812A51104122D144838120042220045
+:802F0000444021B2D86282CA3222C01200108A1608216822122484004222188221A24624F2AF196051436213188934244F9162644002230685D1147444885C182094458A5284948B4822A3B428D148391460418484211B28248885A521008D4130128823162244E2C568822D882F22C428CBC36082E0490B15043B21301844DCA314141BCF
+:802F800014244A111A1121A48183044A1124C244268144022A7195086668418C1E0A1902502D8C23041304422AA81440088B94A48F22A8122D882A8DA842222F9404184C0312469121D0248204298112514849341C6914810319841848C88822C914082E148A312860228059228800228481212B1270224282046162206422C122C1F0C99D
+:8030000044D084016C028C426244921C021042B429218101478400800498200248460248118341943311453811280040048B12AA146849147048146C248420618840F65B7D248914417934210400524C9431484443465412440089611289189C18844328A5211148231392210012AC51482C2921018531118091224C02C126022280512262
+:80308000482604AFFE0F1922016041254598A400400888E088C24212124410248612444804188341C8448044A2420025010028210048212504008514040081C88F8145925119C1221D14464C57842E141661441A52827094011C42B21C2441044314B4284854484AA1211C51288B1225E48182342133741452283C2321014D2111181A969E
+:803100006A2349558426144A5248182331488CC286CF74024382541C282E122004624081048CC4169668440016C82186B8480281224C8824945242485024122A81D4142108008429C128884002C048444F820400824448D7F16044492222149438291298122835481142312281211016180210086458647048022C42448201182642448864
+:803180001478120200A02180A1184784188A1188E882210AED7200218C84020028708104008A024346280A13122402130232882688342412004906004430448429044518621410588485440420024248E0A2F47C730018128345112101448C850E88800A491894814188844AA841008034882088A25893214821085024C42284528D42206B
+:8032000024C441001092482A2411742408BF360613035014A1859428464508181E24422893149961100410942480014902121A0815482152144A08108808541684021400504180C112414184182C81F874BF2420C322868491121042982210022110022184A9110810084082C142403A1C246024004B212C2404255822420080D1844108F5
+:8032800041801898222240F8FF32008004C12C022C42512440A6242C864402C73440021008409C42882311983211A585147264280125C42842109488244244212081B422448401449012F04CDD50244C544811001001002A1888018885012008548200190811224C14051444841845880400C2421614020000812024C2141A2818C244DFAB
+:803300005C0C828601408244024582F4441240924124D02464818512048181008091829012812112A1702304814227224449422832848504C430428422424CA452816141F085331484D041B4183221450130318C814214C528901140912190283046483890844A410880C8491B81534548810C14004091481A7262C5412F1112112651222A
+:803380008129684286D82A28E23644A221A285D6617228F322282C127615F3B24416B222C24237842439D279F4162D24291BC82446B44882C2356E46AF48E226B4426221AB2256F622388512E641B1244AF6AA24AF84246E211E536CD41581E6C45544434464A427218F820D5E168F8D989466E2A94811F5C11449F2344115F41955256803
+:8034000086A554946F1C8639AA8E113B6E87D1633C49778815FC822CC14B8A8C0524414ED38B81CFE18459A1CD984E825DC517188885126C9441D1C9F12E2C212904149F11519B526F43A454474547C5ADA84F42A12229761F0146B61662938F8471145824321D232E188F24E3824163542C44C8C22668288D25C502948D48117084B8120F
+:8034800021D182A118A7D21E8529F41D452B157E649116B442D42444D6E276422C7CC878683241AF2162841E16C78838412F28B2A837A42887E9CD886F990A8001004A0142800888800998224C299298228D952285214AA51214228691148B28A028A028499121B081021F8802199284288816088C44244A04801488048F5F4E53131F31C0
+:80350000512B39F6C86EBF75F3434B35EA25F383677F3DF55372BF6EFCDA5A3F39F166337F3FFFBA22373BBD2E2F99FBA1A115F198A91F18FAAD3B1F31F56222BFBAFF4B4B2F22FA2AAAAFAFFFE862EF4AFEE6E457DACFE27A26F36A677F5EFAEAEE6F72F3A2B1AE219F8DF7C383BB8875F74A786F26BF72AFAE2BEE6F74B122FF54544F19
+:803580004D4DF2BCE6342B331FF6762BF23B3BAFF5F74B2F3FB4F6436B2FB5F7C33F3F7EF7C3E2BF297BCA7A8AF2CF93DFB9F9BE2677BBBFC9FB9ABBEFCABA6CF6CAF91F18FAACAA6F27F643C33F3DFCB7E7AB91AFA2FACAEAFFAEF6577F3B771F1FF72CAEEFFAFEEEA55F54F6696DCEFB6F56F7C361EFDDF7C3C3BF8EFE4F4FEFC1F12E28
+:80360000962F67EF2AFCE2A46FF6F722FAEFC5F4D4D44F61F1E82F346F64F437773D22BF817348FE3B7FAFA6F67B7AAFA5F12BE23F61F1F3F1BF14F64BCBB734BF3DFC4353EFF6DD3EF29F9E2792EFC1F1F4B89D5826D1ECF872723F34B44AF1CECE3FF3F3BA3B6F6DF762E27FF5F767654F49F53DBD6F68F8E7E66D64FFD6F64A64BF4F1F
+:80368000DB5CFE797C3F34B65B771FFA4B5C2FA6B472A267EFCFFF2E4A2F8FFB3EE84F49E92EFFD829346F61F13F773F21F31B3FA7FCFFD3F71A1ABFB3F35A5BBF67FB11123F36F6DB93BFB57D4BF35F437F3EFF2D9FFD2BF5FEBA99FFD3F3DC9A9D4826F12DAF6F61F4D2123F3FFF7636BFF1F1AA2A2F2CF562B27F75F5E3E44F4BF52DFF
+:80370000AFE7E6FF62F64745EFCEFED8DCBF47D355FC7A7D3F34F65B78F7B1FF9555EA2F63F66446AFCAFE7E5E2F8FFB3E7C4F4BF9647E97F8C011C011842941E81241186481144081041D4844848504441287440060443048004181180000108454244880442248A14120011A44A448852448046B8120E241322216F44E111A7242128128
+:80378000813622482D1219D422014A11D1220118844200241210182251A2812C3441581285022542180889012B84288B14112544584210628229219838223F8D052CF411248D121F417248F11124EB141D24AF14F18124AB941F88B24A3985AB9443FA4AB143FA4AB5478AADB14F8AD458FB244A1CFA244A8F51F2245A9E252ECA8F59C214
+:80380000DA9E24ACFC91242CFC91248D931F497248F19124A7141FC8F24A111D24AF14B911B24A5985AB944782AF647924B8427924B84AF924484AF9244A8F3C05A41D648F22E14136481D24EB144CB24AF181242F46F9812C2BB45F88B24A3984AF142BF84AB54788A9BB82D44AFB845289D324DC48C2529E24ACFD88243CED49C2CB1F18
+:80388000C8C2DA1F48D624F9916C83F4912423F4812CEB141F41F24A841F81F24AB45D28A96982AF447124A8144782AB9463A2946FA2F12EE30082480000000000280000000021008008800140010080040000000000000000002501BF7B0E1001502818803242822C0134207428041800100400000023049024604A1822281489C1242021
+:8039000022018C21B2480142A622043028208C21F281281033A23016485D2881805114111B8184130480918410047270484432441285240216282411C811424068212C049C0446C8434820082144001A449684875214641F7706312F1C026331484D288032425938141B818511A124898291140024723054244328918C28231438412281BC
+:8039800097425262264891482992412218116D4828AA05424C82044A61E245F22844167112F61C3A0000403211818001344082044120084110048480040020011604920020911244813048481810082182210080388120F2DF6A10421406005041004A286814004188C0838A44212804100410080040021844A0282C088144250200400809
+:803A00008421848100828564885F510B4E25331151121042B14211718201462378C2D11418528323184CA2181068C88618420241216D288800A8C082822C21643188A18C2881A482C014216381C8828281B04481082E532424572134004072544141A1848288884C584284884C187212014884240021A4248400200880282A341323186CEA
+:803A80002812480064504280988200988398882F75021D641014012111408208137443C24111241D8210A9848882844C9888410044302482408222C186809182400AA1002A088C018D1282848181C04444F0E5BA60C4501484688042820220C48480820200248881800844491544C228200100401802448A321821100824861C02B0416286
+:803B0000C1809142493484F098B68002283504001110A868C04442288F2138882008A08238298108002212006082124827848144123084850110014449210841214604A428C01AAFB6051164842444141218142001212C084224852182024444904400840085128411120400001440140238200118813100880048F0A5B9144E25644D2837
+:803B8000B542440116C1218468B08244028B2186581A0082C3E241024B84A014C42682421884D1829214482512084CC1A1C5521410B811022F88311610B824544A496429E04402D0830880C4414462A01210029848A048A04821802A12220882908444008C01290100004004804918020000981022013048E04448F8E2BF00460C4088146B
+:803C000048042F110C0048E06884048024422852862942024140489288240000829088182140081018088018082484301820F8E23114006125240210080021481CB28204208846220400428022A82441211230848384215424002001822181250200001082280440F8ED5440010000000041100400000024002100248120091002248810F9
+:803C8000480280289882000024004440040024F0225A1012134211626422104386C242001121D024028C02490220A22860220028002418460220044810022D82D042140444C82129082D82448841F0247400004110146211244184882480020000811008400841001008830824008048C81800000084004008008301F05A676044508448DC
+:803D00005110694469848844020080022C021008C18088481214182A180A4810E8280484008608004C482808400884100821126F86010028144001208204211480880862A1A228A2290686022A8422224262441012E2410448100441004508E4002100424011022924D88C0563388100860214001400460213042120141808812221502207
+:803D800010281808814022280424408A484808444042480460888440065C01AFCD0F22274448A35487400441241454881C022100812502100249818228110422400118848004200148E0A814C88441E8002504448481708202D54E9242231CF2474147284191463842344634422DC23561222514A222842BA283E4427228722282A2882D13
+:803E000022418147A2A7828954288829B4C20D8E8827244C4898828486221804C0484442214608144696185489F8A7DB1415F68145C506444E424D29645D24535418114344222408648F2406212D8848457842C42822235246822427482538844216324224100A44AD8288894CAA84A542022C18B88258C8AC58861AD8143D12FF310C43F6
+:803E800052A428E4B79215149215242F49DC22C28211481F18CCC22A243C228D4A2E28818C52482E822682D468AB268B8128AC0925EAA14194484160888F25B198A1488558E2A1A7A845BC88182658C4855224A318484822F87D4DA024C028412843848281969468880000800888488848A848802481E449822408860486048604862444A8
+:803F00002444A484844A084A18A484418841884994884B41F0E21234777A7776243FA2766A7A61E194F471732B333BFA7F18F18B891D471F28D82134826EE22F2E74AAD88AB4EAF8C8888F8AB848E66CFA6A282B336F67FEF6BCFE943E864F6CFD888ACF88B81EFDD2D26FC8B88438862FACFC96944F49FC84C4CAFC4E84ABCC2B4CAFAC77
+:803F8000FC488E6F4CF4C446E7888FC4FC888CF7C8236C444F48F8C442CF2D0E4762FFF2F422267FF2F66A4F5F52E482F2616335F5C7D43F5AFBEAEA3F38FE838329B622EA2CFCE242AF8AE2AAFEEAAAAF86F268688FA5F7C2A6AF8EB352F7D4666FCEE26EF8BA8E9FBC7D84FE8C8B6FADFDD6D6674C4B886B8C4F6CFC56D49ED2AF28B4E1
+:80400000C27CCCDECAD8A8F86AEAC7AC2BA84D86EFAC7C8EDACAD8EDF8C68EEF8CA854DEC4EF444DF347673D47BFF2526FAD2E7D47EFB6F64B432F44F497C43F47F62B291F14B6C1F8C1C2272C2F22BA227868F8CAC8AD48A5F848488F8A8BF628AA2F27F62636AFEAB6A6F874624F787988FA888C2F84F5D4D62F28F4828625F2868EAF68
+:804080002DFD929227246F4CB882D4CAD882F84AA88E4A25D22658E2AFACD48ED886D8C6F48A885AF584127FEF44F1C567F557DBFF76F24A2F7774E5FA7B733F56F6D7C63B4DAFACFC43433F3CB8E2BC62FAC2C22BC687868FA6F6AAE8AF8AFA28288FACDF22F63AAA2B234F66F72E6E6F2BF97EC28FB859E69FE8B852ED2DD966F4828688
+:8041000023E82CFC16966F69794AF2C6842C5C8A8FACF44A288DCA676A2F6CF4CA4EAD8AE57888FE8248A5F89494CED6BF8D0326011440022623412161124002244800240000002128299128291108810021100225424842088200248224822482200882003FF90A24442415044C1444484244128128482142024018088141001004002DA2
+:8041800012400858000012008D821008A908008110082184009F780D2CF41124C5F21124C7141FC1324A1D24EB141D24AF249921AB9451AF1439A4AF5439A42F7479A4F842914F8AE454F9A44A4EA14FA27458F1244AD6E1A2645D2D4A9E24ACF491242CF4912485F2912C83F49164A3F48164AF24D141F64A921D68AB9459B44AB924B4A1
+:804200004AB924F442924782A9F9244889F9244A7F480FA41F45F22C421E28C3F61128A3F41124E3B211D642D8C1B6489B64AB9443FA4A154B4A2F54F3A4481C73A6C8356FA8D118F3248A8D814F2261182E189E25B49E21ACF49128ACB49146F29128811B29A11B28A991214CD981D2489B25A93924A939242B9447828B946B438B846F3B
+:80428000AAF55C724028880400000000A028000000002180018800004001008004000000400428000000002501BFB70D82001110114201248810082502218008005048211002009800804806000000000000000000888440F29FC5008200000082190211004A08002141000000C02600210010028810028200880000200494200118402140
+:80430000D1984C01C608144003144012142102290A2124104402301A218230244082180124812442240000200841200200850112C0928114216FFD0D00000000821982088160240080080010042440022001008241820020080000002004000000007F6B01000000421048840121000010020014000000000000400444290840240429018E
+:80438000210000100200007F6107100114001004002880241884089840048281400222144218008441120000800100200242211022020000844FA60410011100424481410021801824082B1800908184002122114812004084410464880044002110C242002110020040F81339000000000020810248000000410000000000008400000011
+:804400008001482021020000220000002F650700000000000000293188002100000000000000000000000000C048000000424800005FA307201208218121250800811011218454422A2408280080020040544221000028404481D84202200200008018140880013F3D060000000010E222040000001008008A0200400100000000000000B8
+:804480000010080000000000EFE206008110121812480268214031138608412A94888002A8000011000000002200118228009048840000884914088001476E002800002400008400806424100200002002004054260000001004244400220000000048000027DE00000014008400000000000000000000000080080000009028200200C092
+:804500002800180000F063DF000000000000000000000000000000000000000000000000000000000000FFE40F000000002400000000000000000000000000400200000000000000000010081F4406000000000000000000000000000000000000100200000000000000000000CFDC09000000002400000000000000000000000000000006
+:8045800000000000000000000081F063C50000840000000000000040020041000000000000000000000000000080020000DBC40000001008000000484004000000000000000000120040080000000000800100004F54030000000000000000000000000000000000000000000000000000000000F04FFE0000000000440000000000000054
+:804600000000000000000000000000000000000000F0634900000000000000000000000000400220018200000000000000000000000000F0EF63000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000210000000000000000000000004759000000400840040080B8
+:804680000441001002400400218001820000120000000000000000280000E0280E00400800000000000000000000000000001002000084000000000000180000F09536000000000000000000000000000000000000000000000000000000000000FFE40F000000004005008004440010024004002180018828100218800884000080420853
+:804700000000280000B014010014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C03000040010080041400000000000000000000002800008008000000288400000000BF7405000000004005008004440010024004002180018828908280018840080000288492
+:804780000000800200003F6A0C0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0021001400004800800221000028000000280048000000484004281082044400108204440010F2448D0000000000000000000000000060
+:804800000000000000000000000000000000000000FFE40F00000000000014000000000000000000800200000080080080020084000000002F3A0A0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000008002000000000000280000000000004F7D0200000000000014E6
+:494880000000000000000000000000000000880000000084000000009FA3F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8
:00000001FF
diff --git a/xpp/firmwares/FPGA_FXS.hex b/xpp/firmwares/FPGA_FXS.hex
index 6c19928..1321a53 100644
--- a/xpp/firmwares/FPGA_FXS.hex
+++ b/xpp/firmwares/FPGA_FXS.hex
@@ -1,8 +1,8 @@
#
-# $Id: FPGA_1131.hex 4761 2007-09-30 16:46:51Z dima $
+# $Id: FPGA_1131.hex 5122 2007-12-12 10:07:59Z dima $
#
:020000040000FA
-:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000701E0A006AD6FF4000701E0A006AD6FF4000701E0A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B511115511115511115511106
+:80000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6AD6FF4000F8030A006AD6FF4000F8030A006AD6FF4000F8030A0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4455544455557475577775577675577775577765566665563625523235D2E37C2B5111155111155111155111BF
:80008000155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111155111000000000000000000000000000000000000002552222552222552220025522225522200000000001AA1111AA1110025522200000000001AA1110000000000000000000000002552222552222F21F11211
:80010000122F21F112122552222552222552222552220000001AA111255222255222255222255222255222255222255222255222255222255222000000002F21F112122F21F1121200002552222552221AA1111AA1112552222F21F1121200001AA1112F21F112121AA111002F21F112122F21F112121AA111002552222552220000000087
:800180000025522200001AA1111AA111255222255222000000000025522200005F51F115151F1AFAA1A1000000000000000000000000001AA1111AA11100000000000000000000000000002552220000000025522225522200002552222552222552222552222552222552222552222552222552220025522200000000004AA4444AA44402
@@ -19,636 +19,630 @@
:80070000313100009F9FFFF9F99F9FFFF9F99F9FFFF9F9000000004F48F884846F68F88686255222000000CFCCFCCCCCFFFFFFFFFF3F33F333334F48F884846556664554448F8CFCC8C8FFFFFFFFFF7F73F337374F4FFFF4F4BFB2F22B2B00455444455444FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000004F44F444447F74F4474735530B
:8007800033000000CFC8F88C8CDFDBFBBDBD1F13F331314F44F444447F71F117174554448F88F88888DFDAFAADAD5F52F22525455444455444DFDAFAADADDFDAFAADADDFDAFAADAD000000004F44F444445F54F44545155111000000CFCCFCCCCCEFEFFFFEFE2F23F332324F44F444441F11F1111100CFCCFCCCCCCFCEFEECEC2AA222002A
:8008000000CFCEFEECECCFCEFEECECCFCEFEECEC000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCFFFCFCCFCF3553334F44F444441F17F771714AA444CFC8F88C8CDFDCFCCDCD1F14F441414AA4444AA444DFDCFCCDCDDFDCFCCDCDDFDCFCCDCD000000004F44F444445F57F775751F13F33131000000CFCCFCCCCCDFF0
-:80088000DDFDDDDD1F11F111114F44F444441F17F771714AA444CFC8F88C8CDFDDFDDDDD1F15F551515AA5554AA444DFDDFDDDDDDFDDFDDDDDDFDDFDDDDD0000000000000000000000000000000000001F19F99191DFDBFBBDBD00008001000000000000000000000000000000000000000000800200000000AF2803480000000000000066
-:8009000000000000000000400100000000000000000000000000708F0D0000000000000000000000000000000000000000000000000000000000F04FFE8004001800000000000000000000000040010000000000000000800200000000AF140C0000000000000000000000000000000000000000000000000000000000F04FFE80020040C0
-:8009800001008004148002800414800200008002800400002148000000480000108204000021AFEB050000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F4818002800000000210000002100140010024001000040012800EC
-:800A00000014882800008088020000CFE40B0080840100002001000000000000001200004001000000000000002800000000F043588084410128004840818102214860118002211A01148002211A041400B01281041480028004148828108204808802214800CF550648180028000000002100000021001400100240010000400128000051
-:800A800014882800008088020000CFE40B0000000000000000000000000000000000000000000000000000000000F04FFE0000800200000000000000000000100200000000148002004001000000000000F063C800000000000040020000400200140080018001000000000000800800002028020000BF490900000000000000000000002A
-:800B0000000000000000000000000000000000000000F04FFE000000000000000000000000000012000000000000000080080000000000007FDB0800002200000000000000240000002400800100000000000000000000000000F02685000000000000002100000000000000000000000000000000000000000000F0CEDD000000000000FA
-:800B80000000000000001400000000000010010000100100000020020000BFCC0B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000028000000000000880000003FE80F0000000000000000000000000000000000000000000000000000000000F04FFE00A7
-:800C0000000000000000000000000000000028004002601221214001002200200800000000F0A253000000000000000000000000000000220040024003214001002200800800000000F02DC9000000000000000000000000000000000000800200000000000000000000F077EC000000800100000000000000008200140000000000000061
-:800C800000000000000000822270560D0000000000000000000000000000000000000000000000000000000000F04FFE000020040000000000000000000000000000000000000000000000000000F0632C0080010022480000120013010019240110010000000000001C022200004001000000000000CF8A0B0000482002000012000000DC
-:800D00002001000000000000000000000000000000000000F0D27D0080010080040000001301001904001100000000000060122002000014000000000000F06E56000000000000400200000000100111001001000000000000000000000080840242F0A83F00000050210000120000102182841401000000800220010000001100C02182F6
-:800D80000000000000004FC30D000000140000000000002044010011001081020000000040010000000000002800F09189000000400200200121001021220400140000000020010000000000132208000000420042F0E6B400200400200218208202000000001082021C810100002601000000000000002800004002004F62054021040009
-:800E00004002110038000000000029010000002240210248400100000014002800004002003FAB0E00A02100200100000090420000004200000018000000000000880000000040821202006E7300112002001A1212012001004200000000C011180000002800100100000000000040C2220000FD9900001200002001280000210000004877
-:800E80002800002021022200000000800810010000000000E0D609001200280000000000122140120124C0422227240000000000200210014001902288220000800440F23C24208402280022281081022081024011024200222084420100240014181411100100201801158214020048480010F23CAD001428110028802202194201182450
-:800F00001114142820420131200260210000000011112424240014110022260200004848F08DED00522001480000808482031C0422001012420100421400521400420000198301000000488A0400821012A242AFFC0A1C81842182012002222814000024400100224082622400000080021422192252224002001100502220028004E0146F
-:800F8000D222050048420000000000222001800411001400132444422244314111460114004001400140010048000000821FAC05200100000014008002004A018001144823841402001041010000001C04428004488888000048480040F269CF90110018120000408102200111800160120000001400001810012280020000004002000028
-:80100000228004F0A51F20042A0400802482044081061240021800230218A0810042004641010048002AC112000000284848A04800002364189A4D21A141324AA21100289021222211482A6225166214290142281C4292422346324215814402104101800219F262231423048240428288D22208820042234481F6BA13B0416416180020B5
-:801080002222A2421413C421121840D12352112811250129448104150124211123C411281F14115111171226311133411272415111D011082B44282122A0C40020F639CCC01118283E11208682844281C2218021419111186025181332211C7241C2222B67484812A04580148144218202182C0100704181E22824A24442484A248284A4C2
-:80110000442F28F865C91480012A01422006226014124220044622011A0419042128211211122001121440012260166024E014084E8100800888800888A0248FDA035A04121AA14C808426D41196211F13A351585AD511F141411F2555115A24E41622A2442B446AB45255125E515E522B55A054587E61181119D211F241632F21B153E59A
-:8011800024B44224B8C1B441B4C1F882422F247842B2C2A8E6CAACEE8AACCC8AA8C2BFE54CE114A4112AA2254AA4442A86A4261D411B661B771AA7515AA5541551133F142421B462F221215E521F34E42CED279782114E422F25F512114A85B57196114E41D011F641433F36F71212242B44CE411348A1AC2DC22F2CFCC2C22B8C6AAECC2F
-:801200006AA6442BCCCAEC2AF8DCC6B011A451123A23A844A024421D611F16F66161285AA1111F15F4111115F311114AA5512F12F26161182B442AAC441E114E414E422F24F452514AA4411F17B641954119D211C2233F17B7114112B2411CB181F841222F28B442EC2CB8C2A86E4AAC264AB442042E42EF2548C1511AA1221AA255A0226E
-:801280006AA2261F12F621211B2215A1155A7511F111133F35F55351181AA5221F16C6122F24F472E26E622F1955115E522F25B542A4441AB471B641D51134211F16F241433F33F312124AA4441D81111F1C7C41D222FCC2C22F243442EAA6C4EAAE444AA4446EE2B7C58001001800004001200111100100801221049011800129011880A6
-:80130000010034481848800448348A4482040048420070F20A1412220020022220021400C0130000190419042128210000004011210224283400110000248220088220286418EF7C0E2E511B212E111B216E111B612396612B1619B64299612F1499412F24A9422F34A9422F34BB21D412BB21C4912E421CFA22421E213F2264192E4296D8
-:80138000C1429AD222B491C2431B2926B39122B6917242B38132421B282F34B881F24281112B84222BA4222B842229A8424AE822E4490D1C84C4411341B1111492612991612B941AF642A119F442922AF442931AE434A8414A38222B942A81F922C24E812F22611C2E12C6C113CAD222A12D241B692CB49122247942B28132421B2827240B
-:801400001B282B24112B84222988B4420829B82294822AF4A4FE0082480000000000001200000000188008000000008004000000000000000000004F2A054001142210020000002043210100112002200440820128002042811152210028280000000020180240F3BB9920A418800122221582884222082C81612824002642210850211092
-:8014800002801A810840B1110810812882712152211428260111000080022A4421F2DF5214421B1CC011C022402308002216022411002C5221001A1221984200283111224031114A42613170218221021C826212220000002825A22400BFDB0700002220028042220880214B22010013080021008028810800880080081071220300100138
-:801500000000820020F2856C00002002002382A41240031882248A043042000000210010022200004012612248002282000000288228A02424DBFC10011902108202800282004214229021398C420114422521022880220200221128241410012E828882002180682288800400A2EFD7030019022C0200284228881120458122242214424A
-:801580000114106122002002800222112810021312A22888228800808882288228022A04FF974211010000221022820110028890821532814A02004221002840820200000034112044028240020024004200A0822FEE08120000200200208282042482104202002182C221D022082A2404140010C2210021408108800428002C88864282D6
-:8016000002F0D8B180044220040024800468004A02211C2402002F2104820000002227121110A284002308002902110028A20024400240F2E9C500001200208204000000000082800400142800000022000000100200002058228800800882F0AA2C8005004220220221488004A02421213180084002501226420200282213420223280284
-:801680002318021502400120382282882D6280882248F29894000012000042002880048008422221208484880420084A8204210000110024008A022004201802200200F0D653801281420139811302B0421A022128484260142722200240C24213220424200414A222A200601800211302002D42228088240400008F1F021228002012428D
-:80170000022B82201422C84200230E424214004A4881C481422A88842214124282642800211308001100A0488822A08224224222B06E07002002601228C04180880429882808000088E8002226012008284820086018112400002180240426A242622082288288B22C05481A040020110280220229024011928221142125412262128821D5
-:80178000144240021420048002481113880290610028480080881402216FA1040090112248400231203442882234802222041908200448C82501AA8406800222800200222C8842030082009022008888884F76022A81220224120000002228C2230400880000212225010014213422245021A282251261288825918100800A008224302242
-:801800008002BFD50248000022002288008002008A041100422A04488820840A14C28A0426220400001140022400204802484200003E970082001302112880B44308200400244A0211C0819081000000002008862212012C02000042002100008621884881F6D25100808482082142222800C022601248002C280821211880086024001CBD
-:80188000C2221442400220488284924210A22428482A243C228823026221F07C78A0518A8162112E212F135332272222CAEA12A24624216230438A58212B441B8421C82F24B622782291412846018E421382A446AA08602815022513D3121AC281A04246C24229C6224EA2482B2427148A8EE23282FAFCE3A0248E61B02162281081425299
-:801900003125C28248488EE229EC28E42634823C52121DA1868128984127241F3818A1A26E81282C72835223CAF663E229E21A488248612817282A543246914288A0CA8AA482482612B2E24821F2BA862022220260243A8394222B42CA0C23E6281872610129A2668A081021E214E424E212A24448CE42214A34E21C826222822A982211A7
-:801980001B2C8E8219A4223D2211212242EA2824B242E22AA8A822488A88F496AA00222022A814602600009224008002244810018002908100002002222002460246026E818008000000240000FF5C0212001B111F1434133B4423642439F443432F25A11148CAFC22632581A244CAD813ACC8A0663F3CFC63432F14E424F44241421F1869
-:801A0000EC2CEE2AEE2CFCC3C14E4237382B881F18F8C1C13F16F641C3EEA229E428FEC3822F28BCC2FC42422BCC6AA66E6AB2E2EC22AA8A2AA2A26AB6D20F5AA766281B331F1CF443533F34F762222F2474C3F241E32F2DEF29CB422F28FCA2E32F18E8227422C2821D412F18FC41415AD533F423B11F34F442C23F14EC26FEE3E1EEE325
-:801A80002F26F6C2E23F36F642623F3EFA82A23F1EAA881F32BA43F4E1A33F3A9E413F24E42CB8C2FE42422B446AE626B662B662B662B622BA62A622EAFE276DA0132A24F2311115F373433F12B42224D413F463632B662912B2C2FC626225C2A22BC4CABC4238431B446E723F3CFC63C33F34F643422F1CE42EF6C3C32F36F6E2E22F2E13
-:801B0000FE83832F26F42343AE223F3858133F3272C3F32161242F347243D222F442622F2CBC82AC666AA4EE2BEE2F2EBEE2BE6226A2EEAFF30A5AA762281F13F341613F33F313732E624E423F34F243632B642562282F2CFC236335E12AFAA2A23D833714CE811F1CEC2EFFA3E33F37F64363372C3F1CEC2EFEC3C16E622F26F6C2E23F3F
-:801B80003AFAC2E23F3AF682223F1A5A111F3E7643F1A1E32F2AFAE3A33F2464242D422F24B482A8226E622B662BEE2B662BAA6AA622EAAE172002226022E0120126226832482008008A8422081142824A1281122104422110221402885012C0816022000082002CA2482C024200F0B3378005003448807662022302218221191402231454
-:801C00001102808452229042602220022A0C227022021410225832112C084E820048882024A2842240F176F3A0421B212E111B21421B212F2691212B1419B24299212F2419B14229F2429113F242B3222F14BB21C4B12E421CE822E411F221429E212E4296C1429AE222B491E222B49162221B2946B2917642B281366219F6628119F64290
-:801C800081112F2428B24228F242822229A842882E42DFB30D481B411C146124196224112B1419B242B911D2229A414A29F24291222F34092F1439222D912E52982C6C112BC216F12242923CA4292CA4292CB491C6421B29241B49241B6824482988B4421AF14282222B84222F242882B8A214E222F451CC00824800000000000000000071
-:801D00000080018800000000004800000000000000000000F083D2001C02114218424242008004142231002C82082880982210128202002008A821111440010000008290428008006032AFCE092008822226A22828202268128601230C80B2838408006219020088421922246222142220082AE41218022B4226512213C281001304222A72
-:801D800084822AC44148DFB44501E210A1422AA1422A84242228A24A30C122142CA2842A78820220D521A82800884A12314140C281E026284891411C0A2448260326210A88468284A2C22824002AB4140A10018800290800104101211002140080228202502200288022022200200225012240021400110000A84842F01D370020023440AB
-:801E00000100000088123021000080042400288002A0824002141122808102408202000000002004DF63468142012052212A0124182119188148C181281282861301220021400222802A0219C421248E22281A0811C0818622481111020040024800F0952E00142870211291330000821188111E814001140022002440228282828AA2283E
-:801E800013C4229021211880011488212814210000004880044FDD4F2102000000242C01140088802283C88214004824000000000011908213A282408182088231000000240000D03F0C40011811880000488002008821000018292801160111001260141800C2000040020021888A824202C0222400F07A27002021024602138412022800
-:801F00001A0212624081040010222B08400200C0810020941120012511430211888082048004240048EF6106004041A2280020081423040000242800140042800290412200140011400282002004000042000000F05BA40011601224660242282988C422528021C68200220080288824811201143220C41100404182011425024810028032
-:801F8000861402220000D796008021410110010011000010612400C011800214002142008800C08112002C08141012812888080042100280B4E20D100100481868C06122488085929180A412582004421423044602460221200888308242C8122D4211488A82A42848822A6428488229220A8A048AF43D930000002800800814218800806B
-:8020000008204401204601824661181220014002120000100340011111002140022004E7C120048082041A148124985180044082A428482200183082000040018811128009112088081021082F2802822182200A822008FFD60620812281228182A121182002002A21412102228641410114141422144A2204008A043A04A2488018019057
-:802080004200312A2422828484849242224FE50942191121812486A424581384344148422A042C2594424A02182048022D230050218220094042414122011128888A822888A828A8239882239882A2C8822AF86F1120011228180000808388C2B180080098209282E01801001188001400A081004002220000000000002410021FD5090078
-:8021000000000020021001002200009041291122810400802408882C02828811112C0180022200210042420020025DB3000080022820824101118021420280A81212200800000011800500002480492208241434112400002229041423F4CE3200282A0400800100888002482002401132121118C082140023041C312140014800828004DF
-:80218000484002680020021C042829028FC90320311128A02218383AB19193111F2A088A81F221B216A2A81AA2884216C19115531325011511C1814A94438AA812A0A429B892718181BA83A911343908D01112C2433932422322B442B24304286E2122DECBA0452822125A044A044A44E114041F16341118486A45B142A413181B861E42B3
-:802200005A282444324223622C25212CD111A41886818188E4284482948348488EC2428EE3318EC226A2C8A0C8F082824AE418A8448DDD001D11282AA1224AA5237E41286AAC234E41A0C46292B06224A2642E231811828EA217211F12846814111F2201189A08249692211021F58282681CE21A8AF2A282A08826A1A8242F2A2AE22AAAC5
-:8022800046AA88B482FAD931000022822220022A088880081C081C0A1C8A84B831043B42B021041B4282318001881912828288E224896214200446024603420040014220F41227A0441F1202284AA6255AA6644AE514FFE1211B6ECAF441D1DAB5A1E61CF562C23F18F4E151FAE114A1BA6E62172646F322236E61C2C6E33EAECC9AA8C7C6
-:802300001DA11D823E321F1BD311A8C41F3AA2631BC81BEEEAAACC1F3CE43CFCC1821F2CFCC2C22B88EAACCCCAA8C88AAC888AFCC9DBA0557AA7311AA7555AA6454AA6541F1EF6C1E11F14FE81E11F1DA5DD1BE2CED33F3EF4E3C11F17AD9D2B9D1F16E7366716EEA23F24B462FEE1A16ABA43E41CAC89EADC11BA21F2337323F121E16ADB
-:80238000F6E3F12B638EC1CAACAE8AF8A3A12F3C7EC2F182822F2ABAE2BEA2A8CC6EE32B882BC88AACEA9FC60A421F1327A2334AAE644AA6756AF3C1711F17B761FE41611F1CA5551EC15AF5E3233F14A6D61F13F5A2B11F14C5331D633CF842432E211F12C6C3EEE3CEC11AA847CEE1EEE33E721F19A988AAFA7163121BA61BA6AAA688AA
-:802400001F38F8C1A11BC81F28F8A2A28AA8CC2F2CFCE2E22BEA2BC8CAA8EE2F74014AF431711D215AA3467AA7176AA7541F16FFF1711F1EF6C1411F15AD5DAE61FE722F26BCE2A47F1F19A7231F18E834DE12D632F823232B4C1F18E43AF64343CAA8996AE51CEE1CF41113BAF3C1811F3CF4931323F161A13BA6AAEE28F8C3C33F3CF88D
-:8024800083C13F28F862E22BCC2BAA2B4CEEE22B8CEAA4C8AAFEC23280011880012A018004001210C12200922813080011282100000000A012400126021C08003440012C0228200442F0B8370011220068A041221AE61618C18148883A84B821848844218122C28121008E2122142924819821B08192121124282C29088A22328121C08243
-:8025000022888246220A8228826EBB80B41122B21122B611326219F2621119F2429219B24219F14292222F1429F342B1222F14BB31E414F921424E813F2264151F22641D3F2264192D529AC2521B292CB59152221B2946B291B642B981764291612F3498612F2498412F14A8422B842AB44228B242A8424AE822F4B7F880B41184B41122E6
-:8025800034112314F1421119F24292282F141BF14293222F1429F34281F0429123B342A9124AF9228256A182D2272296D132A52C2CB54182B591D622B41142A261181B6821482D8219C6A21994822A94822AB4422892822392822E429FE302828248000000000000002001000000000010020000480000000000280000000014F0F5B4146B
-:80260000001200681322A2121123018034822C6811480000200224180000A01200802188219181882CAC820000144882201802202884F25C1520240A1468408204322222236111A04182288AA3A1130C42308100295221B08181448221222102142002002E4130212124C02200821C42214421F4272A1442C2408126148102172238222376
-:8026800062148210A32492A88E42001A32818229811211B28191412E12202221061C858128C8C2822601133222808402308228344214426F6309808201806222482A2101802111A2499880224101420000210000800120810890210022480010112218220814202824D2A50922808122021C01221A4202002100112100221001002A8412C1
-:8027000022840880025012004002238226824411014002004280023FB2490122141440818243022982011290131128803261426228002811806822806922B0E1E11122C18182239463483C28886822242C08206228A0C22800F0518D20021C8102C0113822380000241901140068482200004822E024028228A04B26230182214631421961
-:8027800082AA28281111002008800428F0797C1480021128142840428292122011021122212214224219028032212482202801231281119181C04228D02288044221272800222121E22800F0447F1442200110012200008A2218014042422208182156021AA424002C0440118381941118800842400224904228230480062C8202F04CE3C5
-:8028000000000000422842409121421800420080012D12800800100150122880040020810220080028000050228822F0DAEE000016010024348064224001800C5800402128020000184282000082112001242C04A0824002A08400800880945C00200140014E2234803421218E410042E02104238881418206484A029011215022110088FF
-:80288000148021C1222C4422E82208240082A042B022880AB0EF0E4800130100208204C081C01180881402001482102201004248828082011C2101828004004082448224040000282CF49917A0421820020026A1412A51221C29C6112480A8242438881800882840028A041E22281A82240980C28200502222004082A28280024A022022C5
-:80290000F2F4BE00281001400120240421202414828189180290824082A812002028041110212801198228883481212582288448827842A24888882200FFAC0D1A0200301142240020080060141242601400008021A121002880044829823B411B1880010020024800224880042002BFEF07002820041100112001280000211A0842211AC2
-:8029800088840440014081641828821200202184220A828004282142008821290C46F226CD001400000020184221042219242804008819080011134823088280210442140025020028A8428282802C04006248004F9A074601801221045012001083110112A28032221221426022302200602128002E4111483902400110022242282122DC
-:802A0000882182800888D0AB06001021044229042B14144280028248240000000080140200302280810112806128008210028008203842000029F8279F0082110042202404460120A886195821A0B4A084002084A42125810200B08234211C22A22142121B2C562328022A04802884040028422814281E34601180040010031988A142189A
-:802A800019C21124800880314229011C0988800413216411111200190442001002218092224022220814281062281F2D0811138832211B444819D422B411C4122480541111822F14A4692F24A6324800808416B2921402A0412AC4A113B6915812881716421997412AE8285632212D226662242B242B2E23FCC24221132C82C8234AF26710
-:802B0000F3E01721488102402104DE8125B1D112A1192AFE41811B9826A2189A7821A241882B184E81621AD211E33401148EB127242B52E01431111F2AA3118A31A24E932502A0A4428AAC48882CA4A2A8C22CAE88236612A27E8814682A0114E0146124171223B423B441C5D32B34E034C142244AA981242B9C4AC911C882243C61221B9B
-:802B800022CA2861221A32D11E612AA6361681F611821631928223A2AAA6220288A2882C04C8224A8686C882EF64460100000024C0811288128812100100122001002128118218822921A81282262108800824200222000000800242007F320D5A54111B2215A1441B441B441F147443F3C3833F2CACAECABCC1BC41EC2CBC92F9A2822FA4
-:802C00002EE626B622A2CC1F18A8441F14E4267511F372422F14A88C1F18E82CAEAA8AC8E11F1CBCC1E228FAA3E11F1EFA61E31BC42BCC242F28FAC2C22F2CFCC28227248AE42EBEE2B842A84413A8C8AAAA8A2EA27DF4F051711F14B621F221611F14F441411F14F443413F14F4D1C23F24FCF1E11F14FED1C11BC41F2CFC93912F2BF8D8
-:802C8000E2E27E6229B4925C115A7541E12E58316EC32F3CBAC27881E13EAF2A2BB81F18FEA1D11BF91F2AFB33B1EAFB73F33F14BD4214F2A2222F2CEE2AEA2C7E82E22CF4E2E22F2EFE82822B8C1B2EAABCE2AA222AF265C2A0771F12B621A2221551111F34D4117443F3C2C33BD51F1EAEB11BC41F15F5C2412F31B5A2F722322F26B6EC
-:802D000032BBC2FC91914AF541414EC217113F27F643432BCC1F19E13EEE2BA7CA1F11F781E11F11E73AFAB3B11F1CF871F31D812F2CACCE2F2CEE2EFCE2C22F2462242F28F4E2E22F2EEA2CB84224A86A2BEAAAEA2AFAD26E141F15D711B621F261211F14D411F441432B443F34F4D2D23B551F1FAF111F15FD51513B8C3F35B5B2FF3229
-:802D8000322F27BFB2AFD91F11A1541F14E8247C11E13FF742E32BCC1F11E12FEF23B3B2FF11F11F1BBF91F3A1A23F13FBC1813F37FF83812F2CBC62F4E2E22F2CFEA2A22F2444F2C2422F2EFEE2622F28B8C2A82EAAACEE2AE22AFA974D8001140048144834482440A1482482A04124484A22082004281842210010021480013C81C4114C
-:802E0000C082008A048A442288A248A0482008826FD10A8E4128221146014250124083041142112522C282222908008824282214008082A42490212211226024008A1282120223244202292802AA047032081CB41182B11122B411F262121B212B1619F2429119B24219B14239212F1429F2429113F242912AC4912E421CE82264113F222C
-:802E8000E419E22265192CA4292F22B491E222B49152321B29421B292F26B881326219F2628119B24298412B84222B842AF442A22AB442AA424AE822F41C23C0411B61481A6214197242321123B411F242911B212BB413B14229F34283F04291122B9423F342912E521C89AC852D42822E52D6C1519AD2223591589AD622A42923B411F2FD
-:802F000042821B284219B4421891A219B44228D222A8422D8248882B4229E822F4C1DF0080040000001100000000000000800800000000800400000000000000000014F03174208C03114082016011800420542224001A8224040026022022641480840180818302114880180120242444220400822800DF220F201821218202008A34827D
-:802F8000B04208821142800D130820A4284824118800C82A21A482200A19082AA92122422C841C011188402194C21D220014A83FB506486A1121012C220170812228B42204C6024821D2228E43422021A8482582888884348120A4828088B2210C1B835A22A2484601142A04C2204422C4232422148AF23B130000112200001A04800810E3
-:80300000110220010048282210810214485A8201A02118000000B042089041003148888008003FF10E00A021140000004800880012800400400100422004002820A11200400200000020088028880228F0223AC011204121C21120A2121819110227285022112C022992420080942232801882220280911224601228422903202484044228
-:8030800042482A04800628006FE50514001992210028321091428008241432212B4248004021820248A0240060212021112182B412120280048004C84200822800302F800112123011002081012424882100400200602480012C08200280820123220200004820048004222028062822B0E103000000804421021C23020046022148004217
-:803100004A020000211200001218828248002200000029024800822482003FDF0D181C0414008041C2421123242288442202002924022112C8200400111800482A040042484224860210228422082888400240F2453A000000000000000082002800000000008004001C0200110082000020080000282800004FD3031211000080512162FC
-:80318000D012022004282428482984024820044210820100111A04C0814248C22A44420220088028248222088840D21F0D00100100480025A14120088227240000202402000020041280021A820800002008108214020088220000CF460620044810020021181822211941022901218081814482080012240040A2412C04221212120000D1
-:8032000080040080020000887FE70C2200000027212028220282481301A041130100118220829532002C818489038019022248002800218082142204200400CFFE0820010048144820020011002001000000421420A641114222002128288001808404000080849482200220029F1F0E100100130222480024185021800220048A8522083E
-:80328000902228148848198828048681089848881C2102C04180A22848004821102202224BCA808121010010020029218401108204002004104102241160242082811202272222282200800448A042000082220014AF4E09200400230280951240022502181002212905002C02138105221622220120E121020000008230422044010020D1
-:80330000022B2821F053670000280020014223820A42288842860192400124009021801461118AB41238228028098820080040128102880042210048213F130318000042400228241422484A8104484800424842001012521248223022800422422302222842004880042004210000F03B54000000341122A041120012102241A221A0249F
-:803380003012828AD12184084A01218032418888C041984E81988840013082800200002914022382F2C27320810140A22680C142DAA5231A482271511143A2112F21A584A0854A2128F24281222423834131424AE828022F24A1422B891A83AB21F82AC241304127283188282C88E4241492A2424001AF8C09221400D0125432272510921C
-:80340000122B2223B4C2E522E421042F142434112982A543882CC84235A2722417131F24E42BC362D83AA3C8242CE128E818A48A132824244282A424486220042422A0A22E62A22D2180A14512681011A1222B142A42D221A123142981B962818892124A45011F242418E1117252B141F7C242121D41237B7261281B219AEA12B22234729D
-:80348000183200884842484219A44490A2422C74220280F258AA80022800460320C18280082C081C28C383223C28C38122142302180082290118B0221891121122112211221188112C1881088880082C88848884FAA2B280A6333A83A4442E622E216E624AE426AFBA1F1BBBB2DD21B981EF1AFAF1A11F32F2B1818EA11F18FE21611711FC
-:803500002E212F16C62117326AE62EED1EFE4341CAEE2EAE883F1DFF61713F1ABA81E832E514D41102144E411F1C0C1D831F1CAC881501CAEC2C9C426AB6A2AEEE6AA4C68F830C787AA32220F461211F16A6234AA4E6BAFB31215AF441811F195D123F14A4EAAE825E611F34B6A2AEAA2F19E514F4A1B11CF261711F16F621211F1CFC616A
-:80358000726EE21B9AFAAD551F1EBE81EB1AE81EFCB1911F1FED16E614F441411F1898C22BEC1D418AA888CEC22F24B482EC2EBE82BC62A6AAA82F4204621AA7112AA2266E222F12F242522B76EE622F22FB33112B7117383F34BD41E115E12AB852D721F122512BC8BAFB81923BCC1F247E33F371633F37F761633F15E41FAEAF9E822BB6
-:80360000B97EF23BEB1E832F23B3418CD3118A12A1441F14E42CA46C7041A18C8EC225D222A4EE2BAE2B622A22FAED2CA0171AA7112AE222F223623B662F21F132722F2EF632B23F1AFB4252373C3F35FDC3922F37F733532F2DFFD3D22F13F533711E121F2CFDE3E23F37FE13321F37F773731F3BFFD3D32F37F3F2F22F2BFBB2B23F37D4
-:80368000F7B3F22F39FBB2B21BFF1F1BABCE6A16F1C1C14E422F2CF4C3411F1828044E422F28D822E426B662A2EA6AA62ACFAF01001820022602221224922041032009202429041001214239012A0829082A018890128001A048A04820088A4402000028F0A6F2001200906180248622021800000000002004001C12014880A425A02880DB
-:803700000228800200108204008A24A44A292208A6F112D4A0521B2126B11122B411724291212B1419B24299212B9419B442B921F442B11B422F14BB21D412BB21C4B11F22C4A12E425E212E4296E12264192CA4292E421B293CB49162321B2966B1917662B181766291212F3498212F1418F14283222B84222F242AB242A8424AE822F4D0
-:80378000C62DA0421B4126B11164241A62141B2127241B284A81D232BB818221D922022C2B89924229AB58382DC24EA12E1216A1C28E212D538A82A52129AC482D521A82A86129A84823042F2488A2A4F04282222B84F04282B04238222B8426F2B4BB00800400000000800200000010021880080000140000480000000000000000000002
-:80380000F06427800480418241222103231293129012602520210118182242002180012118582A019012100280040000008200A0280000BD1320021081C44268484800004248002424862224040000521381122102C041238402A0412691C280C421208804C8800400C2228681F8C6E7202404184829B1228481062834222C2401122502E2
-:803880002C418225A1214882A041112815922112483C24242281A4141CA24848421C0220068A0442008886822228F897892002100148244818502280014220042C21280400001022810100181A021002211002002008008200202204002EB5000080011848224821A014100230112180020080440100428002421400C08100480042824E16
-:80390000810000008221A2003F910F208102242A14024041221122482308C2244683E414A9421440A142C043602388298108002490224213088842114220E824288C040000A048EF420E0028803122214228142424128811886011501223E21CA1421490412E4140011A82A821804401242413881421240811481384888C240400212A0800
-:80398000C8471C00120080240180148221440221A0842142480000008014C24224800800002820082024248808308200200800F0C315002A0400141828204221240242822462142100B042110224184840022028A2694818141021080000A2400282502200238808BFC60E4848802104000080220200210012004691320082241128221190
-:803A000082100148004200481100222242000048888821005FB803000000288004122490C10000822200802808002200101202000020018004820023088242000000488D7380240220140180246211682113842418A22488290310812C080033022642821832214A011021C41120048088C28282248288D02284880882F07F1220082001B2
-:803A8000A01228000020084002140020642200901242220080082A08180080084601008004200400200848CE74800400302329014821C80080081C081C2834122218D0218801A04813884122080033882888348142821188282022A4420088002A8828082FC30C2800480040C121142322328200622B4120240220022213822906628811D2
-:803B000000140020440282222414884002800880840822005F8E088222004210012082020062880021881C968114CA021210E1110400008800240000488004148248820080080024243F630AC0411C041C02122002001C8108148002002314022124142440422122022248000000114820A4828008A0842222240021F0A99500808102290A
-:803B8000248696522322884202824882205822190888196138421182882114D022081221296822422188804821080000808A0422A8228214DF740B6248200411008008212828482834801601424A025890A280825222008811004812420014A811824210018820080020044B9500124819011012415121180011230148E81400000014404B
-:803C00004291410038248AC2812612219881141B422148101142012C2882444202201402EFDC04208A0111000080148108221428862282A224001B2421282C0228C0A20040422104228002428016611888821180020000422AF8DA3920080042182004C2502234281440C2411286018A9242211882881C0200421413042ACC111944A18204
-:803C800018112222002214284800422424002932421F3E04A048181924041B259021342B5A6022118AD2216C29C6A27A30122338413081134921928180C8238882136318882CD821622E1988A4E413A684132808C2C6918268A82E42242A284881F44315142AA42C12904127242146A116398E4AF21181E01428B641B823FE41812F1A5AC9
-:803D00001126A1433F33D4326E122A51112B1E66D111816429148AB86374C3D111A288119E211F1432828E631F18E212A8A21BA8C868A222C223382282228A2EFAF6A5A0243611A1253C72318191612D43A246B223328229B822C5211C06211D426AAEE4A84A0A2D7239F2C2223CD621FE8222212B222CC4232CE821022B45C880782101F1
-:803D800048483714341188A08C48209822684612F2E4B5001C0114C092200224400100000020088210020000000000002220022130223022482190229022800200284FB80AFAF7612117111F13F721A13F13F3434115B333F343A12F2DFF42612F1A58323F1D7B21F1E1E11F26F6D1532F327C23F141C11F14E437F6E1E31F22F323222D8E
-:803E00008329E814F6A3A36AE629F942423F3BF3E1E22F155B313F1B67225ED13F34F4A3A23B4625F363622F3EBE237882F3C3632F28B8E2EC26B622D222B282AAE66AA24C9FBB0D7AF7312117113AA36E1F322AF461233F33F343835ABD62F682A225F35311221B661BEE1F3FFF23C32F1A9CE2CAFC61721F16E63CFE222335D323DE2321
-:803E8000F6A3A33F36F632322F24F432333F3EFE13F325A13317321F15FD62211B2613F443833F12F2A1A11F1EFAC2833F1CAC8AEAEC26FE22A22D222BA82BE66AB6C2F47FE9A0661A071B334AF453513F17F621233F17F763A13F31FB43621F185A323F15A1226AF662622F31B3A37C21B1E2AE661F34E736F621A22B662F2454323F367D
-:803F0000F6A2A16E632F23F362623F3BF3E1E32F2157233F19E124A6773B662AF241631F12F2C3E11F1EFEC1E34E413F1CA4AACEC22B4CCE422F26BE22BA62AEACEAFEB644A06E1F13F311111F13F361613F337253F161233F17F743811F31F963633F3858323F15A1661B622F2EFEB2B33F3ABEA3FCA1E11F1EFE41233B662F36FE636176
-:803F80003F24D433F423633F2AFA62632F23F362623F3BF3E3E33F21F322222F2BF343631B772F26B262E226F261A13F3CFEE2E11F2CEA1CF8C3C32BA2AEE22BEEEEE22F269EA26AEE2CAEEE2FAE0200142002146012822603009041308110A1248012A124801223148212022B8210021C0821488044A148804481442108000000F081D4AF
-:8040000000282048028042822204252248A14828482B2410024282502228C0212AC821258212328122102208112A0888112280081C08808402004286F196DFC0411B21141B2146B291364219F6421219B662B991B24219F14292322F1429F24291322F14A9431CE922C4812F2264112E52D6E12265192CAD292CB4D1C2421B29241B294253
-:804080001B2923B481364219B66298212B84112B842AB44228BA422A9A82AA84E822F4EC21C041682E111A4492212F2211C1121B216AA8282B341B212F2428F34281322F1428FA42112B4A29A1521CF822D24AE822611D2E4256D132A82C2CB1D1E222B481E4222569241B282F24B181764292612F2498212DA219F442A2482F242AD222D7
-:80410000AA424A3822A0429DE500824818000000008002000000000080080000140000480000800800000040080000F02297004100293621413022282305188004A0C1988A12041800A02428284881A018672120884202802121448402228001484308A0140084F0E8AA30429244932828246411492489280297254424002130894A92282E
-:80418000A0481091112D818219F6542280E2182404253488406144A88A641C882521C841488848824C28684C601CF047BF2034C44187182B84131684F12244AE121A282291482B24005A3812708582941812C2B021A4812D81906919A6184D228E414A8842860C144B4182C66412D0122242018242208871C40286084FCD082112002220F2
-:8042000014012004301144100288A281222800001382820C4D129012001042081280068A8408881A2484C48482448A0420047F9D051810044A012011628124122100001224224282008121142C8112064925C142822C0125022A018828103142601484008044044C0800AF654B22461102508248209183A082D082BD14CC91222C22A418FA
-:804280002219A4218820E22204A0412B42234238B4481C0212850142274213A5280024001426E84408821A142A2222F86DA1302214250442A1002129012B29B04AB9C49191282A21840A4A2801108212226221222B2418322948426221942824826A2148012044088141C08480280288BF3203580020014812188D81002100005022122A42
-:804300004421821828C2412C413244424311E84884C43100208164421422244224111021822C0456120C28F0DD13901A148921982420C418A745803444328901484242103442448C9192814E212210311812138411588142488B2100828E429045F08824122E884C058908A028818166B82848F4BC2D704984860200000010342230418083
-:804380000143830228142D1288200982288819B1A29412860848401818240128400422860100AC0242430280F88864004901881122122002809181000000128084240444002242000021244182128A0210088240012001001A04C88800DFF50579951138504122428721CC02482C3111163841800516C432424CB411C4C2884E243230A163
-:804400004AA218122B58D0122844C4A82068489E421024C8281283681C18887028A25A8394844E882698843F6F08C02481200218A0140048880048808412042281101801008C0148282D184002181638280084660188113014400800B0482282086FEA0E00A042C04248222044A2426120D1622D11048C24A182122004180022C0184B24CB
-:80448000C01888912858A0841188200682200800A220088820F83A2B801408200400202A84083042003042118A860582400241C04850210020248104000000892D92848018C4C880888208003FB308222002200220048741C02418282180021128008022922100800140110484001A44444121044411402101001800481A083F7F038462A3
-:8045000000E044010080280420A8841460184225011C24C4C156012488400188104122E4289681601320014A084C08A8148880A8424A0800C84FBD0782291128022322020010E2280321808282A12100400828002E12288200800834C0460000000028444800000042C0116F450E844400400884C0CC8008860890918608A014197892825A
-:804580008C011A0842008A840128822B281082084024410112CCC421283200002008F0286D00222041481208898482484288821811189281821C081972248118480223C8C1490214004601201821A88482131C1441448102A041000089A24828AB2E80060066024222122004004688C222200490220028C8118004388C08C011124021433F
-:80460000098002884641810888884084CA4C4A4804841D6E40082C16048128C12281C02424874818142187182182D084B44222814183B858C2221C9841C081485081418A14814891881C8108C014138182A214828004181032442FAB0F2AA248604281C911B22822D448EE21382245F28882272125B119F1888435512816A34217115E8149
-:804680002A48FB2111442F26C8411AC291630B1D111BD42886A1348F199C14708194512E44569111591124E24845084268184788144B42BF930A48C483A22162688B66442A2462C42C7622048B8C3EC2273222CAE912BCC17784C99210A126A0521A34E1175C858898419648D2A2E522F292C70013CC818A38811D4CA6F1288486A1892206
-:80470000CAA1282A3A844AA8468286F8CC8560243AC222482C74620A8489618C8AA48C89DB86A152174CA83D2A481B1C2AA8A56AF6A448CAB691741242AA28A9AA128A240449621897588811111F1ADC18A831424A28A881C691811B241A889C849AE4842888A8C15AF87DDD000040088440084062882480628800280082280011283180D1
-:80478000280442888008000020014021010012000000B0C40D6E626FC3D3A8F23674EE48EAE682F264445E784F4EF684822BE22FC3F984848F8CBA21D991F1A3A23F19F981818AFE2D3DAAFF1CCC8AF8687A2F13F259CB1F11F361615F4AF388489AA9C88F1BF2D1436FE6F2A3227D66AF8CACCC8F8CFCA5A51F1D5C5455A1C48FC75444B0
-:804800004AA6EADADC44A26CCFC8A89DCFCEAECCCFCFFE59E9E026F2D6348FA2F236746E486E282E284FC6E685F7E4EC8E842B222F8BF9969EAF8191911F88F9A3AA3F1DBD51B111F12EBC2AFBCDDD1F1AFCA8EA27119FB5F41113EEE14F4ADB99A4998AEC9BFA51436F4ABEA1F2B4B6AF8DBDC1FCC8C94F4BAA8D5F54D851B851F458682A
-:804880005D851F14A4E3DAFC24246A72CCEC2DF9EEECCAFCEEFC6FF3056E626F43F7282A6F43F3E8686AFE6A684F46F678384F4646A6888FA9FB86848F89B9A1F839393BAA2F1BFBA1A1FAFDEFED1F1BFFADFD1F1AFA68E83AF3686A2B173B665F5FEB1DAC558AEC9BFBC1C37F72F6A2A36F71F3CB891F1CF8C9C95F5AAADD45F541454ABC
-:80490000F4587855A544AAAEDD4F42A266CFC8A8DDEFCEAEC4CFCAFB2A95E026F6B6748FA2F276348F86F668688F86F66C6C8F83F3ECEC8A18F29AB8EFE8F81A98AAFABABABFAAFAB2312E217EF1CFC6FE3191CFCEAECA8FA2FE3333AFA6E62BA3EE4F5FE915A4558AACBB1F14F4A5A5AEA37F7BF3CB891B848F9CFCB5B5DA7145F54141F2
-:804980005AF5585855A544BAAFDD4F42A226CFCCA8DDEFCEEE24F4ECECBFAC022220020080046022008224001388822414210400004220044288400100884888408104481440810480A2480020F8378AA042004082064842824268002384440321C08122004A682214248250180010410280121201130880280813088200A8808884C841F2
-:804A00004F48022CF4112485F21124C3F41124AB141D24AB161F41F24A921D28AF2419B54A3924AF543924AF747924D812F924484E914FA2E414F8254A16F1244A87592FA264594FA2E449D2A6F4D1242CF491248D121F49326C1F49B24AF18124AB161F41B66AD981F24A9153B14A39A4AF44F934482B944F8294B24F8384F9244AEF3D06
-:804A8000018CF51164E11D682B941D2C6B1617812B141FC1F24A961F89E2647311F84AA4478B273447832F347934C8A16F8B7442E1A2F548B45F22FC48814F22A1296D5A4E219CE94DD2A6F141284DD21E68CDD28AB2687191941A1F49364E1AF66A9413D15ABA15B44A3B3423F434482B944F8194BA2B41ADB44D521F3109208804000013
-:804B000000008002000024000000880000001800800400000000820000000010029FF8091260A110C2464F1241481218C28818252C44E648248111A8482812C08C40C2184C4468842082424544C192122D141449311400008C11042084B4444298244028B44F032282290240188831AA122CA45240C284481826084881432546841422248C
-:804B800062218212430A4830121820622812482851202A8794184C31884C0800804181F2542A8022EC82410287644711248DA28D124D422A612285A448604C20018E4A49226341C32488F412284C041E481B2822428535148098526B1825314449410143A8123283018142424C4258241284324F52091850220030281608008E4818504233
-:804C000049941236088C041A2404882100122D881004221032111828208181120422488314C414824C0842800280F44D370030221218848004101201120000212242100880440400B026082240120180084601410020844421180220822801F05ADE80024140840581E08C212A1802472482308868139C281C21841444312111894514386A
-:804C8000484EA24CC8114460518081341446A86842882A840888893184851104619088881A08400218184A0142B0C881C883803144008420880246084419C42114184484A04244144414448028C444424C0A20268484988849480928490888F06D4E800249024481100824280040220886A224133648160148004190484072E4C882A218B5
-:804D0000106211200119112824840882406121004110824188F86AEF80C4421C227262146421E06132248932242244418524D14292118C0860426C01289624821C08802211024984083280158813480482428244C2284100244822BF670D444810162814CC18007044A1928A01624889044A2138421189912481828582A11447A82211C086
-:804D80003812482886028A21C2241460488C49382480391885A46943911886723418F43A6800000080C22290181212842C44C81200008C025828403441411022A1418822486840E81192482884A0484B810000008008812A9844003FAE0700191212624489C21A2C91148C9211848E44E147261612C81184004F11342425D484C255CD2238
-:804E00001216E8C8311240A2432A018678A192488AE182D584E21A110418824924B814A8818DA449DE48B1A881EC8144F4B64DB08404214C326CD0248132248C82818629011628B424049A94A84828842800209C42A0428AA21280442422A1122800429688688881003048800110C424228E8A006122004822A301002B1816A848842DD125
-:804E8000452818C12150181814241042C8811629E98184619182825411889304190111891888A1848200A028001E44490C82E7239042248502464261941424288C2864241842446240C24280011220CB4245112202214CC4828584149282442410082C448496A12612E415989488801C84480845F83F8830840041000084514CA2A54908A1
-:804F0000A89011A8B84193261291AC91504820213849448118188810480986099484181A8861D184818004000012C8AF710814800185644410741401429480911188880084C0442420FA164814191428140282421112921100180044882004191804168888410821E8D09E07102212088110481818081A2804E04122918126082182004095
-:804F800022048418122A2C0410311448308488127028241128818592981E48890580282101FF594202108814584248002D4120022141141908121C18551835D8812438490048130440148441018E481671810846091400A644084601442840220200CF970762805422221931216B14728219591246815A284341D82154842D4429012D24E0
-:8050000028004E31857214022952822098442C04210018122142002180D2280940E281D8834A9882844297A800860428002082020041448A01C0414304890C43018141A30211B0AC8404812F183211C2E0882444081E4884A0841442D4400441284028C18BF021EDC03C221C146858895A484641E188225648948912942848C94128189481
-:80508000642D48822E1113928444CC2442018D11602484185841821182174818508487441CA83410283848844C29410884ADE7242F623186234168E84E2889E41431481CF261181F83E154D58438116F89F1C97115086E26957948F811118FDA7629E9C2D6947444D8A3F568111FB1E485F588481CE1448441921897958E429718978D9744
-:80510000981D18284B431CB718FC1C889082CB182A887216A81225E411013F6E0F49E448F2282ACB24C5F119C147A279E4E231248E628F14F29988E0E8E1427424DC14F3B28F89DC66F5242480A1882D925A52734714248E24445E94D67693F951815B9C2F91E848041E8490124E428F48F888981B875D3917185B14824ABC84147A287108
-:8051800058E48DF1A8C1CE887FB70B1B244051226865F441218FC1F21121BF8CD848B8825C242B5DCBC21D811AA8CDDB1477986AF81141CFE698812C725D712B96488F41F88168AB96A149D2889CB42F287412718194849F94C8181CE94154584D1842A788C6E244F5B8C9CFC161818F84E389ED48F8828A8948D84AF418D23011411122B6
-:8052000090123022100621501290229022484482812004810000000000400810C24821100221842110022180024222F03AB8344F46F564278F319343CF72D6EDD4957245F32B2B4EE24B55973DBF675428CB34977CBF21B2AAFAB43B7F32F276715F16F3B4B41FB3F661636F6AF132732DC3BF99F8E1837F7EBF42A4BBEA6E182F2C74D283
-:80528000AA881AF5C1C35F7DFDD1815F78F943534F62D28CFA28AB2F68D874F9C8D8CFE4F41A1AEFC2AEBBCF98F1CC528F8CEC84FD4EEA154DF365753E7F85934BCF36F26921F734E5F363638B22AFE5F57353BF357798F4DEB6FF7D785AF2AFA45FBFFF6F274FE7FF6F79CF4BEB82F76268DFCAFA3971CF34F41A4AAF26F6FEF6FF54F45C
-:80530000BC3C4F5A7F1CFD53433F21F58F9CCF49F9C1CB4FEDF5D81BEF68F85B524F63C32E2F3AFBEBCBCF7CFCC1EB6F6CFC4AD26F4AEEAAFA8F98CF26F7E8E8EEEACFADFF5797F075476F62B619F32928CF52F21715DFB4F26F25BF92F2E3E11F7DFDEB61BF95BEC2F88C8A7F52F31E3C9E836FBDF5632BEBD57F16F6D4959FB6FF69C337
-:805380006F76FE323367B4BFB9F9E3BB7F7EFBD2C94F4BEA8EF6945D1E123F39F493814FD9F1C9C17F51F151537FD8FD4151AF82F2787EAF9AAEB925F9D8DAA5F81818CFEABAFAFDCCCC8BD9AF8BEF8AAB544948F37662AF23F32922BF26F22E25BF53F36D21DF76F26D7DFF5AFAD8D89FB6FF59D93F51F83D8D5F73F37C7C4F7AFA76FB6D
-:80540000FFF6F27EFCFFD6F6FCB49F86F66AE8CFD6FE3C31E7B4AFA9FDEAF9EF6FFFDAC9CFC3FAE1F84FD1F541433739AF89F89C1C9F9CFC969C8F85F58CCEEF45F53E3C8F87F7E8F3BF99FF5E5DDFDFFD9C96EFCCFDB4FEAFAFFDEEEC8B732BD9DED8CFECFD9CA600008440484148C148148648A14920482409B048024624B84802460454
-:8054800083842184090098D012480880688120011E48E089041E48E081442218281928F8F32930A40030244840048624648185113448901813C1268444228901281185144294825082836D2242200180C848801408888A028008200A16280442F0ECA4D034F41124C5F3112487141F49B24AD141B24ED141B24A9921AB9451AB9443F24AFB
-:805500009143F242B14782AD954F82C4914FA2D458F8244A16F1254AD6E1A26459ACE449C24A1F49D234F4912485F2912C87241F49724AF2812CAF24D141F64A9219F24A9355F84A9343F24A9243B2427924B842F924484CF9244A9FC40B2D4868A11E44A3D441921817418314F14894118F441BB5481BB54899441C7BA1981A7B4A4AF985
-:80558000271889D824ED11F8254AD25FA2E449F2244B96D1A4E489D2B4F491644D429E28C7148E244D118E6CCF1699418F44C9244EB1848F5429F2481443C2948CF442B465C8948CF5699E400848000000002008000000002180018800004001008004000000200228840000005012F05DE220013222150881481624A8878C42512114111D
-:80560000844B38418B9244494408225362C1C44222282A51284B6140145148C0384A414404178270C281140820213824444C084B122A54F60043C888886444437131084945A2189A447CC4F28422111048F2E118228A35CC464458216041C3395DC498C0852B411A28838914F438C18C54C1430516A8184384648442811B1820011444BFEB
-:805680006C0520648128851502871749B144B8A435381B868153C8A681228564295F2826E68C614122869115252CE4CA7135C81C1E885CD369981413992C484AE14431488185B545522489AC1EC304429088AE11446C0836E143F4962B8041242A0844C901204122881175421241319460828911048E484674241808160442229042800401
-:80570000189283024F12C944608130110042844A0144800144F0FFE35024001241004820218404822314552219C4244308008242158812022112184241400100001C01884001244042584A9A04001068888FBD0C204241082860810029E2289111184CB8120883914813E344E114C92C228469524244CCD12151284088A181829091B08365
-:8057800084A8488C486381C26A49C11420C59281868884A486008F2405442830184400460812284233018244B042B12424934486C12C8A124814028D122C5128188C148441011901C6014A18682890412210028C4478121808482240D8A5091042012002180023A481807946D22109918153288105602426C92644411112001882822008F0
-:805800002182198118311882CA11C114D022E141288C2804C28482DF56071A84869222424110C448468482B521B81488958442C9E2122122948226C1143028130960A23E4832252A51848A01859182618602421A14424422E22128EC420123E1884456814C8151289F270B85A6418C01200652430118C12242100814003B18219038864851
-:8058800021187488065490818415C8444120223449188D84B1C084842881418281004A018AC22829B47E02224014E1411208266832848908005022C39112D048048145082441840012004C840229127282C41192308800A0211181104898840060128304F0324B80B312B22C31222E14C306CB141D6A4489BA48014B415889E881B412A232
-:80590000122E44394C18C424883952186048AC621112CCA82115C65244D9B81132C64E83E0442811A28281818D128E4CCB12892881EC4421E284A32124F74F9044001142002849C14818C081822441255485148418828D2184814528111498128F4462224225084B8250228218848949784A011811218220480681103A84818CF43D5214D4
-:805980000080042D2D60918584018028211C34824483648121805814803218442482418240C3812001814026C48148244C415A943412240098444A180470B50614400246848101245974280257A4C2918224822488A21240C82827112622688124142A4188052302254832210010C88491218220C288002180219182F018AC6014448181F6
-:805A0000811008191142342218A112D018F182211225819321134462189113924814481A822448682524109111482B490018312CA44811212480218484048041F8B26400111817441052424C8404381C084F180129184478842948C1488C819414494CC813436C9A8C34881800C6988112212111848314222418B96481C48890E81048789B
-:805A80004238182C82F8A4222038214111101101C9E1114228741A01C531111301212212004E282880011CC12880410444901182134808101482019052413890C22C0188211058249FDB0C844485117448213C4811103C8218C24800202181118121D141C8191082082311024A0112196188C01800A72110819882188289518383880124DF
-:805B000020918888D0640E4904806241832361824848111140358242A628220848842C4A0240068140022438C048C028B051082681215781112284828818242004001A84F4F77E100454811100490480A11840E8422102111111811376418239846654414B16C8B059881462841C0484142188130587141598488114B081451106460827C3
-:805B800084844210E8E2068C0148204234231011681487428082344D444D184A42A2485082801188582160152221461112D28141A4492011D221250129018E1422212041BA84818A890A2D48927F1E0B1D145B289711B97271117B6245754DDE14F168869AF11813DE444F5934A1C72117487D2A8B923B1136E82DB1A85C1CED5C2CA341BB
-:805C00009E825AF5C12283F318468D4A1425417582788112D122E1255212AF14D5265DC825F14E1C2F38B4B8B29238826D1284A12D8889A1944D423F340F4E4110F4444885E46792188B61121F410419FA438CCD91BB9423E45A7928E9187D81E11A8AF5214157618A0AD752E72EE971815912CA2194221D143AD5897811331A9E814BC44D
-:805C800031958C021F18DC81F811215B8425D984D12825748222A43CCC7C2822F9958B144154C4544D4A4D19178157841CF54A283F917362A94835C8284DDF15B8163B5827218B449F14D28878427923FC61A316D851F94149AF22FA3C582DC2985E112F253CC12B1989CB19AF267511D198E5257D117AD97912F2D832AEC28B111D928556
-:805D0000E287E889A4E59ECE8B41129E488D8817E620011200805424842412244022098A44062800824C2208218584011828218088828102288002288002922001222002224222422F5842B154F43439CF41F124618F87F77177BFA1F227273F53F28D9E8F86F7E1E21F68F841149FE8F22627EF54F464761F84D5B282E48EBEC1FCFCE67C
-:805D8000CFBCFEEE7CDF24F438A22F2CFCF2F33F1FEE2FF4A6C62F2AFA8EC7AEC24FEAB889F8B9A88FAFFCE392BB884F72F2283ABFA2B346E5B6FEC8CE6F6C9DA34F6ABAD8FDC4342BFC9FA6F2B8988B66EAFB642CCF3B4CF115454F5256993E799FD6E663F35B3A3F36F63B25DFC8F87C4CAE91BAFB4C4DCFC9F32424DFD7F7E1791F24D4
-:805E0000DD13B351FDF3F91F8CFDCFDFCEC3FF56FE7D588FA2F2C7C72F9FB6EAFFEBC14F4BED3DF8B6EF3F3AFCF4CF1F1BF3B9688FAFFCF3C3AF2FFE76271F35F14312AFE4F57A7B1F34F5C6C7BF3BF9AEA68BFF4F4DF7D2F2AFAEFEB89AAF89A899EFC7E3924CB144F5246185F428214F65F579573B31CF42F33839AFA8F96B75BF2FFFC3
-:805E8000CBAABB14FF61F13A32EF41F92E163F86F45279AB44AF8CFC51584FE6FF8FABEF86FE47627F77F68BCB8FBBFDF3CB2FBDD666F6327A4FFDED2DFF96D6BFAAFA8A8B8FBDAE558B674F74D188D598F5E87D8FB4FC98F84F4CF999184F68F8E87A6FCDADDF6E538DF8AB54CAFDECDCFF274BD115F524259F11F178319FD4F47856FF05
-:805F0000C5F76C74CF67F38F9FBF77D73BF9DBFAFF74FC7F96BF7AFABBB7FF72F17F5EBFB6BF7BFFF9F91FA2F7E4AE7F78FA6F6F5FE7F7747F6F79FDF2EBAF8DF9D8EB6F61F7514A6F73F65373EF79FC939BBFBFF3DBE91F15F45943EFF6F3697B9F1DF9B9BBAFB1F9C9D9EFDCFC9993EF6BFB485A6FEDFDFADAAFA6DD889F52AEB2CFC6EB
-:805F8000FDA777000010C44860816081E0810486081608108804128304004219119892901281002908294188888441081E48E081041E486089A04181928100821D712048140C22901444241504282F3418E1643181A536B4441229E88A0451882F824454864624028C2CC14852888221122511210418124E1148888481826081A3440880B6
-:8060000041B8B3043CF4112485F31124A7141F41724ED141B24AF1112CAB9419B24A3995AB9443FA4A9153F2429557822D915F8AC4914FAAC4855FA27418F1244A96F5255A96C55A9E242E4A1F49E232FC91248F32F19124C3F69124A7261F48F26E911D24AF26B991F24A9153F14A9343B24A39242F247924D842F924484CF9244ACF5F55
-:80608000072E4B1E6487121EE4A7141E248712F0221117C18D1419F248B453B14812F44A3113A294578229F92748182FAAC5915F822CE122EC19F2215A96D494E511D2A464813CE4C8D418759174487211744C22F8489315F44816128F7432148F3422F24894222F6461824CF922482D144F82F58689000000002400008042080000002183
-:8061000000400200001400004800008004008002008200002501CE8E80511420028D2464431208852221C811B0432AC1441284124372146182482618D42864892112414F24B1448A6C43E0426112A7181741002F221164148B5856282484112804AD42188608481FBD051C622838841A04896334123FA8837A884148088D148CA218912989
-:80618000F521488242869421109927444318B52279820847112928D18288E14224C81456011B12834B018225286C21B08806C8189C32849FD6023217642820742874387464831171A44869828D117062E982211589E4230413F114281332A815B444928425941164C5C2658F54A1215247812E111F4C8218C4412C7124B145691C8B52108B
-:80620000226C8148462AB482C598942B41BD9D4001188C82012450289E2825228908309430842C61818531A44624280481353A1888442B92D2888269082B82107A118421312212836281A04883244102A884002843F82A2E404104A01240810412181B41404812810820010041005081002820892101284302411741181E282112188246C1
-:80628000034C088D22128902A820C442CF2E0E803212004C9122162814B8822402189216C21824835E85141A0850484712296141466521842D24422688CA2543C19127111642A842A0124448005E8200414E82490416C4284B1AF0954840312412A02118288904B042382130188829C18890C200824044DC2102534181118882292168421B
-:80630000121721C01618C0382B12208488F442828810CC922A0432A0C22CF44BBA00240050241112428381810520113112C028D9112101004118844944622241488C2243312449CA1110AD16004C8101111241209242C49084899214F01E748084642186212142140124128C312286588221C012418931A123848511088A0440028125280E
-:8063800044084828895122858164524691C22E142082818404321821809848184B1E108A44044C12F241281241228A122482911400111C21022D88112E924A028A03001308190355C8244824604400812844863481224181833284E08842061810F255D3001C0188100400181011010016084004400810084430441624028628248841842A
-:8064000028881248021881282188C092008024218202BF634C021921112331221D4419012C2369211116381421121141261481C8412E824E28842A44042CD414392836287C411424D124B218E828C4218344C56149B9986212214941A843498863836522816286F07548A048100443423428100422150882A11028D1126181A88C9418001D
-:80648000200110042440082A08006184C0282582048220286488218088049200CF760238C018448438000028408881112102488084014088410100140014A0123018702881018483122101142446018002180028483FFF47411271213641350253511424471850182C61180020084008641120880140480400113018604140481281C482B4
-:80650000801892863821882C28C282802894848F140F8280810140088C018181008414871100142D1116C1110044001800288082011111191251411142192181123111135125200312208204F0DB5510322811101111240222122A04604268C021191148C8247038D4811182C81411881002849082004288105228001144C02884508282DB
-:806580002001125892DB7F20144114011548180511102151811068110084148114009994181C8211248184810412119011104118028221137842328132821038C282218A8241FBF48B20A121288911A821148902121828801128038931484244701A1209229088B0490180024C9321448CC628218C3212800A244C434842E882618538221D
-:8066000026044122284F870D1D280046140232211D282819929211281D1288C3E224C22482604A4922220A4C28040084400860224C1184018200238204C02400103218211E880049D4BF09204818888208810084400880018541490200421440B18101181422C41011210560842110451865A91818004CB18282018002001F810B4519965F
-:806680004290844148C02149456141148C460180816314241C14428441C58C25445112490C1C94A2608490E1802131114225239125C443A8218240124402002308EFB70A1E1296C5348D43249E141781D322F295343019181B51C53843997158F174611DC813741134117F92044193F195D1139148134188528A2CA2225E2B8F91E913636F
-:80670000BA1E338643E182C62163D212E311E911D19EF52412AB21893B72322938442E212E1A8FE546823689E11F8131861B22C953821682E491E3840886E8129138228C91124223A192431218988141260C3F4141825648A817418A812142245484234152234CF941A31E824489A8832B816E92329849E9828229948497131457122B22C1
-:806780001793674497928561545CD299621293F2223197B18531113E814F91B2A152898553BC4D69FCC1341FB2E8D2C51D211C6198475C22522E411CF1114115D441724DB219119919BFC474987193B2187181784B7287D6211268886728AC72828221AAD1CE443F450D42182002223042842B84122B84B04218B4421894824381088B84B7
-:80680000908824894212480224C226226C228226220882188E482200862862882088026088288688628928FF4904577A27C2D77257724F63EB59F3121A2F24F44F6DAFBEF2C37B2F34F6C3D1676C7F7CF75757BF98F9C44F7F5851317FD8F8A5E5DFD8E927F6878E2F3455778B447F43F2DADB3F19D988F6169C2DEA6F58E836F5478FBF40
-:8068800092F8B5C7BF14F6B9A11F1AFA2E258FAAFA87255B749D133F5C55559799EFC8F862526D244E52EFC1F1B818CFC1A359CFC1F6E16BF025273F42F62D1ECFF2F43CBF9FD1F333216E61DFD4F6CA3A7FDAB3B8FAC9FD273D3F18F38D8DDF5CEC2AB383F185873F18F81745DD191F14F585844F345C665E516F5AFA4E4F6F69D99BF49C
-:80690000169C2DCBEFF8F8D2D15FD1FD398BFFDBFAC9F19F13F361216F5EFA292B6F43F3415495F15171DD1F9F91F39E8C2F2D7CB6F4786AEFC1C1126F41A151EFC9F5C92D145F77F63157D7D3DFD3F11D1F1F51FB5A58815F76F23CECBD1D8AFB49338DC8BF91A1B9CFE2F352C91F31F183826FC4F42E6CCFC3F3E4F45FC2F248CB5FD360
-:80698000F35E4DDFF3F2D8D95F75F1CAE94F67F3C8685FF3F2E3F14D748F8AF3382A2BED3E238F81D57CF4AAAAFFD8FB49E4ABB32F3DDF12F98292CFCAFAE8DA6F62F8E8FA6F43AB9B6F43FBB8982AFFD8DF247F7FF731379FF3F37F3FFFF1F11135AFA757CA5F76F23CFCBFF2B37AF7CD938F81FC3F1FEFC6F6F9FA2F82F9451665FECA5E
-:806A0000C8CFCBFE3D3CDFFEFE2F2EEFF4F43C3CEFD5F4BCBF8FB4F456148F9EFE74369FAEF6B7AD7E71CF6373BEFFBEAC8F15E723F3C8CAEFFCFC2B2BEFEAFBF9F2AF2AFADADAEFE8F9AE9CEFCBFBFAFAEFCBE92FFFBEBE8F8AFBA6A48FABFFA4F4EF460A0045011C4178244108122284204164814412444024D14802280000180000C0D8
-:806A80001180012602180040022400820081120081F078CF8025112881A1210081009018001008444914C2480081008C41412804282E481122001A22024284219A022898800929238A218862838886F1BBE1C0421F4152281F4132681F41324A1F41B24AF1112CAB9419B24A19B54A3924AF1439352F147934D812F924488D915FA2C48116
-:806B00005FA264114FA264191FA26459ACE449C24A1F49C2421F4952281F49324C1F49B24AF19124AF14D141F64A9119B24A19B54AB924B44A39242B9447822B944F8384F9244AEFC60465D18114FA1144E3341183E441724421F148854CF248B1418F141BB54839154A38352B9477824AF923524E941DCA56C4CADE255FA234484D1B56B6
-:806B8000D5A47151DC24E4C1D434A42147144CD61EE141F646134CE654C1442D31482F5493442F64B924E464D184F4481469544A18DDD4008248280000004004400140040010020088000022140000000000000080020000001002DFFB0C22A0122249E1842121438C011B2820442CC9188A84C281128924821695481664142242222342B7
-:806C0000081228282212888E51114829D894449841181C5142384AA848228011889684FFF948A14182C425C82AB08862882C218873125828832841683A195158278147868A7148849828114AC212426F8238484C21958246E2180129D8818202A816E9162198221E88848984C4482A114864454AA2921C01F7F780270C22C3618483A88149
-:806C80008584913420424884D881E21994211CC8421A24A24391871849C143224F8422421468188D12114A02118A82111131934F2438241B84328D124238D28304412C848965493FCB0100CF22416822122AC1282C2148F2912885A2488961812C098566818D3486784824C824484A8221948283B422211522A492B022E881021B482AE801
-:806D0000812456818116189841448C8422C8241A8463822824AF460722100400000000880080091480011800002081840212A48222118002004C32220080084400008001006FED08121426E221A22591213028182381485221401AC42240681C414C0423240648C8493212292814028224248642B42114044521341217840060420012286A
-:806D800000C4282EBA0014282C021508002C2101400210041480084C014200481A84A621214A4118824A414202130441632284914182100400001800F0A5F9A012844129A116240083024482A2250185A2812C0284131586642180260888412188242018C842A0284128442811244481220026042021025084287F540E00C1000049210168
-:806E00000012100E251484C438818364454200282840381468224C021C12328A49A121E6C44C202921224448088E1422A4844A5184A02146F86A8780622200437226280140081612110221002311042240C84A225810128494124881E0410444A14964811024048400002890444828008624A8198001128502302800188D220000809898E5
-:806E8000004118801204B01804000080249814000012428502008084048188002216084CF274CCA02122454818D4426282492181C1221818214130828F2881B12441A8164189C24A221AE28201C14F21A414400856C114A748E149A1161E484488218C028180246382CC1C821334184B28A6F4162A009012302284180084815012502A40E8
-:806F00001424444844A814484420C4420020A2244322F42482001262861C84B448210148C0483084008384942880C148BF2F070021400221400200001800800883C4488800002282201404200440024004484200000060442004424800EF9C032003161A08401444C8921810041840D42482018032482E444860A448874C49D12284120457
-:806F8000A844C0824A32C85084008921242444A4142A21341442200228BF590E80011008214044882121021200414C32128121004820082368C82C64242800A84C042128428024044442224841522A212424242404228F2E0B85786802835122004110728454464B224C22820180082C744A92A21E584B13DAA888838624C4145140744801
-:8070000058888B4448C229C48C400C701C54446AA22200430449012422A011CF6C0F0000000024240089088608102801422004004012440A004122000040042004200481420084002004F0F18B10C8484248800224004441442228880000002129614149A18488420014111445184868444800204208405448282842802424022722901294
-:807080004FD802848004002110082C48042912020020424212B2448221A8880044005C088845288266410018000044622A1208424412420023046FF6068006004400004480024002008038428081820C00484445810284A04100000000448022040000002180F1E37A00000000008008100810080000282044044180942442004400120078
-:8071000000280000000084000000F0752110B8482124440220025044453424200200004602241AA1119281824004511111851838481842202101004142434628820400404242A6115EF52051884984040010224812D84482B22202800820086129041A8588080040551422128D4C484A0400006044C444282812008004422914F2AE3B0099
-:807180000000400200008618081221440020A442444800420018802202411820291204000010088400468C040000CECF00000024000060280084008400002012248204440022240000884400000000004820040000007FF10A20420410042D2240C2828824102A08008024A4424B424064844954469022482A4AC4846041308460411822CA
-:807200008C041008488084142C01004A04CF4A0C1212003022210020185A882484108A28018A084AA224474443860442892401450610A4124B198012042800424284B048A4148146A8444A044841F072150000002400258A08B0825888822C01C5082842484144684800704454444D2490244B221604221E1400120000488B448548084298
-:807280004C0428A024002FCF0C6F22721282A1111221C0122592822F31F111138B989E898D888F18F44848D0911481548985F844688F44544449F22424224C02284556442E246F22F216222AA1191AB89229C8122582E831F111118BD89659888B488F8424C448805488C5E884E47C066F2252262E321A213112002592822D131B1119E8C6
-:8073000089F818888F18242C44511148848588F44844C5B444A622224480524245C4246F22D222EA22A1131AB8822828582229C8111B1119E889781898484A240480445C88689F62050000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000007A
-:80738000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000002F
-:807400000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000AE
-:8074800000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000002E
-:80750000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000AD
-:807580000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000002D
-:8076000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000AC
-:80768000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000002C
-:807700000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000AB
-:8077800000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000002B
-:80780000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000AA
-:807880000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000002A
-:8079000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000A9
-:80798000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0029
-:807A00000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FA6
-:807A8000FE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000000067
-:807B0000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000A7
-:807B80000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000027
-:807C000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000A6
-:807C8000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000026
-:807D00000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000A5
-:807D800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000025
-:807E0000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000A4
-:807E80000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000024
-:807F000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000A3
-:807F8000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000023
-:808000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000A2
-:8080800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000022
-:80810000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000A1
-:808180000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0021
-:8082000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE4AF
-:808280000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000000003
-:80830000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000009F
-:808380000000FFE40FC0288C0141412A61824322182201C084244416684196A221202C082AC434299132E9084B828B844512280200618C14C4484149842122024428C02428281200B0CE0A00406A818145C81430244983EA427188247222C4226C72282292C82B81ACC112822B8121824D88188BA58305838C26346881833C48444E2843B0
-:80840000228E922490144462C44CE281644112288C911849F1477C0084108841848122C222160440682A4C92222548CA8283811808001604444CA8241628944429220230C825280484802201280000C443012A114818F428A40022122441001608860498184C1804800122C223A11421E02621022F2201B044221808902800424084220873
-:808480004C0216044C440C1A04288001F0DEE60040081078241814042082020010342620022029089092821008814008428400101884344400102402222822180020F179F200001008000028100400412818120082249082008183A18182802824040041C14A82C424002200204204000018F083F2000000000000120000000000000000CF
-:8085000042000000100200410000000000000000003F7D0F22448302160426C442836281A72222824911182809A8244E280022C2B044C2264AD22C222CB144824194342B82812514843414484244622EC813944C81844448228126A4124346F8AEEC2464004C52227013C834199184128E1811891CA218A9C23C122D3430343E8C3028198F
-:80858000822171140249E18628E8827C12022444184628A82443C2182181108801882AA4928C95244A0118829F2A05216082221614922E1E46148749AB12232368C88489911A4588F922122E484931A828AA64124B43443646B812A86949E88964616CA128457812142CA42142124183E282C848CC41688843A63418B024858205BFC20F92
-:808600004722444014021C81B228016088141A1422882A831204224C0181002E1242436244844A6222200221202438444C724802424814480020B848722408124C62885ECD10124112017022022C012400C0121100141984618914008012131814880920280224103A11000010418204100200428008CF774F41015C012712111120240477
-:80868000E21C8404442E831CA912288419F448149B289348411114B41348628216224412B1820289B22148E8122161A18D82C0881424464B0884884E840032221F2706141400134241114202B0820400211928E9120120DCC11511082444442951282E88124002A22428290226018483088C48022C44088482480000CFD64B036071150242
-:808700003022A0144820324148181524120366C11816092E88864131211484471880012924683200819C689112122C0121111442A50121004328043A2872710B8B414B42819051A014235424412996422B424622B4483248842901848A12C421A220994280E258544239821292128C7428A3280016C421150446841212226849A09280281F
-:8087800048042CF29545104822042912042624A441184529020021002488160400266188C4824E18211C34144110D4820411008280084C08288C88048242825622052869F447E840034112004012088011010012267421042884788241842E412831C018807412182182024100811018846284000022003024848286F8174514486184902D
-:8088000011C0524129744282D72A0124C02A8C256211248A9238481CC8841D2889D68412F348121D8825664218141E222813F22681008628D21818846AA62486286849A828881AB44608828E6C7FF4051C81122631624480166C419041468124840445D842028143C834222860112924286245485267A2100681009014114120048022044A
-:80888000A0492088538428F01358A0210081301A44205268322CC894812A39883632886034004882243034298101C084D01EF4924210022111238448D15888114218849822422400000048DF470B44234111024964114A3144002B14465123A024A041AB1418830418288714001084744162221240215A386024B2C18F6122011988A44165
-:808900002194528829844CE4217814C8C44628F25B32808122096311285112181942A22100288C78268A480118008828205224402331848810044111301230B2209824C100491248082C0822208846E6A249224245711428444351241952822814148C0223014241A3165118434252284421182633182481850420E42118D81414E89244FE
-:8089800072244A0482942812001A22A1411E4430281889F81A6D0000181120444E24A88484204101821829842888282812112411421104400220584186843881504812C08414210091004420322444A024AB5B4078110441421F29128425946590612904821CA41480911180414199841144828C9848104831143443011221001428211110
-:808A0000208828A8848200828281328348F4617B4087160224422002102148E21862C1288489822232448382044222214C440456C851124E28C81492848D21C722448064A28937484215024C81054228A14A2124013F12054285A241111C0110034A18028888271400C083241420410184118440420981701254217081440411144424846D
-:808A8000153281A512543441630810A48220026F170D1508484249120484190114C4183870114201228988C19129022A418128B21AC211434842016084A0418311241BF2814880348244141E212183B11824E12186944283514287213F9741E25203117D18442FC414D321B4157622D832E2AAB4137C88EB14D2A284D88A2472E1324526E8
-:808B000048A122AC021E229227E98FA4D52AF1384267A129748375817193D84279467432728A6151E7D34CF232AAD089D4127886F654E8C78D25E22844F494164B4496A4326A72E342F114423FC1E211011E531B111E122F9152128F18AA853B318693917B1B9B9A2E28FAF912838F91CAC18AB874FC81814BC426162272255111541F8849
-:808B80001888A2C12AC49215EB98A4981D4ABB9ACAF28A811F1CD5B32CC524142D13A0511A41A2461AA9E45654E8AF5103114F3611F2184653D63C7244F54C146E145F6434218F14E844311289E815F25E1324DB7429B51AF119113884B71275F924156D5E8963411F8D544698C7F54F24F1528645359C9F21D2DDF274244D2A1D52455AEF
-:808C00004C874C2F3858291F8159492CFD68844B847ADF82FA2A2CCF82D188BC14FCBB532004302A10881408818A1408D084044B483084B08484B284048A942848890290844A022880022888A084A09480012A410882204A6488200882449746F014244F43F2252FAFA3F76E6A4F65F3216D4FD1F1592A3F47E783D7A2F25BC5D5DD75558B
-:808C80004E8DDBF5F77684CF44B1637A4CF43D8C1B445F5678C45627FFF4FCB6944E485F4DF146246F46E692F2ACE54E622E221F62F399168F85F7B6214D6E7F48B558F13271FF97E62EF7AB963D92AB554F6AF37E7A2F27B152F77E78CB1F4F46F62C688BEAEF5F4AF115156F56F43F352E61CFE6F65C2EBF12E281F17D7EBFF7FFBEB5AE
-:808D00002FA2FA53FD1F11F881B27F71F83E9FBD932B95FF54F1E7B6AD519F9FFD77F61F26CADB1F11F35DDFEF6BF94B4B3FADF1C72FEFE747F2DF5F5E722FB3F73F3F3F68BD73F7EE61BF7CF38B548FE9F52265EF56A7FEBBBA7F61F15B3C4FE1F55E5A2F2FB772F57E7CCFE7F7E674CF83F1BEFE2F6A41F237166F2356756761EF67F2E4
-:808D80005E7F3F56765DF46F66BFC6FEC1E4AF14F3DBE19F94FCD1DBAF84F18CDF3FB4F5E3998FA6FF37ECAD889F86DE21F587C7EDAE7F25F627277F9DEC84F4C988CFB6F446626FA5F5D2DF1F2EDC6656A9BF3BF3F83F2F7F5EEAFF4FFA4D17BFF8FCCBCD3F3DF492A83F11F9D6D16F6DFD5EDA4F67FDDCF84F23FFFEF46F46FEACECCF8D
-:808E00004AFF4127347F67F536765F71F15E1F6FE7F314267F57F75D567FE7F763E41F6CFECAF27F9DFD53C3FF5FFDEDF7AF3EFF81937FFCF9EFBF3F8BFFBAB9DFFBFBE5B61F3A7E3CF777755F5AF3F5EF7FD5F5D7D4CFFFFD5E7EAFA7F7D35F1F2EF49AB3D7F97F6EFBBDFCEF5AFAABB7FF6FFABDEF6F53FF8AC5BFBDFC93A97F69F9FF24
-:808E80009CEFEDF9FEFA4F6FFFFCCA6F2FFFFEE46F4FFFBCFECF6AFF91BB70220149012E134800268144210112644066816C2241044411442110734884111836484921D416094941D834412842582484348C4422418344A64185020000DF9D0A34440061B044215126E01681B24238812344A8141100004C4148312290154221122442480C
-:808F0000400288122B121240241291828214D04A3894002B8443929843B1486812DF860D2D421F4152281F41324A1F41324A1D24AB141D24AB9419B24A19B54A3924AF1439242F147925D812F924481CF9244A1CF8244A16F1244A96F1214A96C54A9E24ACFC91242CF4912485F3912483F49124A7141F48B24AD141B24A9921AB9451ABA3
-:808F80009443B24A39242B94478229F92448984FA2F4CDEE40E2C542B11126E441726291412B1613F84294682F541BB54ABB81B44AAB4AAF14B985D41AB98394924FA8C5911DCA1AD8A4E411F221CA96C58B1E25ACFC912C2CF4916C85F391648B841F49F24A838E248F14F88124AF449821AF443A85ABB443BA4A79A4B84279A4B84279E9
-:809000008698B22E1A2F77098480040014002041042810010020082180410400004001400848000000840090220000000021286B7F10424442846411842A51258190918C21B814B4452268C1201A01588C280883120A45621542A488482418886B281604A8228311918886014A815882224200442200CFC947D124C211812A616360438557
-:80908000A234462219282C8178126214C827192443AC82A211B18129A1144D2AB280F822444C9282271822164191295B83271118A822342CC1814C381AB886BC1C32884EB2844B484681FE958A24284E1181296345254144DA41714A32841D88321AD824D514328183691886D22104528B813928D88281548464560127A6348B482CA814E2
-:809100008A71A4713864431C229238133285982B8247242CA929814B34845A4A2A045EA2BF620F4542044422128B121A220618128B8480A8412394442921C284A2A8118184282D18282B92804CB4240825814203141398921288502811149281844C4A88082534A442F05BDFC042116362C1418449D1C10280012C0918844E24D0283324A6
-:8091800010A42420044028150230482C6841211504861C62C82D111024A11411181285518421004883148428B2A547E14182817821F218212903218D11A541A2822314C88282818E4251141BC38E289283928143F24421314C32E4699252A229011564211A12F2254A1243F448124A6384B18A5521858284B58C3148988480E78225F49261
-:8092000086C0421161C952688942742AC1199124A842A182818324D89462424A28A82D80087C44C1524B244902A081212581C132826D2127482D448C15D228E1918411C11A85F14418EB81802844A8432E8848CF19473134128A92112F128181414402122498C012822684D42241C131CC0226C8414C221298248642A2418F260843415472
-:8092800061103C4883C111E04681041B84182142008984118814A414228BCF0046311384118F2238441E2480016B243AC48C44262841B4241432322662161463882269618818C0418A02490448F0228850248303B014D248B422982886A2416908259211838484448CD62F47924C23042880C182B014B2C2A228452882140280241984183A
-:8093000032141840E5880618821445914800122904112042423448C084842AC1488224584189682285C4A22A51847F2442C1212240813181829042008018031859A82194524489014200414814C41283321441262102841212188634281C83180124144018241241048420F88379C0472631121588E1A24132343634628A12EA2CF14887B6
-:809380004183E341A8614F29324496C4384246014942A814189634118B244B41414D411E22409811D024E1E34838414CF98842834AE8B82431882315126242A5E484C21C4F24DA1D06278A40814211314430429280060040117448219122C035244C19E1455224864108418B28C02800248E281828C0248B122814C012E024184434248997
-:80940000C948428228843F890A302412180064418042C212002302841053483304444280A82420024501164841042509904142208102818324511C00004110284234286F620E432101A021140026928490813011148B81400100C88F2104000016C844E24306162469834004228042028239848124596141422CC1129E248A22C1C22CB4D6
-:809480006406C66814A042422524662342124282421A28C128221342C221C0281186283446181648B88432228129180820088611C81286284818998116CA82168888C188400830542624F115A640180814A041254101460258004934421C0488881014522100816014608410F8114200165428120024914A0850418146522CB01292484330
-:8095000064A81E282081F887DA0013312420C32812221B122426824242E411087422A1281081823224224A7228C1242D2243410850484D42161C143112400811C012481D1800E4D024214432442044F1CE98B024448411081614440463A881604828224318021D2441A5A44A61484014221803244013048400490448481442001443041C30
-:80958000834404100244818CF12D42C019C04118442C082511044084032120B494043011128711249041124810098E4648E8800868E038140848256214E062082C0290880076882928094F32052638A81149C681140025250284400831248886424802106452122419A114D0296818822D8219281811C182822115C28886011042944389FB
-:8096000084048C341842808222F8F487400949144102B01804938152412119C644484C082219C884C591828CC992841948243881001400C480341281178823885428422344044C0283210128418054824E223F1F0C5CF48538418F1524A3283D2475C22667A9241A021AF444343B882D464A49D16112F46CD14754457A22B662C129FB4AD9
-:8096800046189188EFA2542A8D41214D46D541B442B9C944689823D512F488414E11878116546C974229D488B11484718C86B334F634198B1CCF7D0C1B368F1974118462486751E08131244CA9824AB824D884F121414D284D88616362983C61C8988BC845D17424C11AC9E6FCF86643428CFC1734DD84A22D8C45594194BF24A586AC7C2C
-:80970000683242112CE884F592186F24715494464E122D4A2F86B696C8844AB612FE7F65144361421CF321143CF749124F21E452D613B56192723FB891523D832F21B8587461F1A1231FA8BA2EF8438C197239787281CE886A65111F3BB124F2912C1F48A818CE828A81A9112C62392F2328582A97181F8858212FA8F44371F7281F1464C6
-:80978000988D1ABA5888CF45A2918F82A4148F4868A247590000C1F0481230481287149287249285044482188238822008130860448890844A9284281C8902288828882898288828888028C182224440018120F49D47F071645F537319F93D3C5F45FEE765BFD5F5652DAF42F26A76EFA4FE333BBF76D96FF4CBE84FF5F449599F93F915A2
-:8098000097FFD2F235F38F86F614144F87F268E85F5EF63313BFB2FAB35B2FC3E54FF5C16CAEB42E336F4AF2C1655F56F225273F7AF6D332EE23A3F6E1513F18F323A17F3BFB91839F11F115913F1DFFA6A6EF62B6A2ED8DFFECEE8B8A8BCC2E48AF8AEE1B0D5F47F7F57DCFD3B331F3393AFFF3F37F7D5FE6F36A64AF42F3EAFC3FB6FEB9
-:809880004BA7BD527FC5F578E1DFDEFFEDCD5F62FA26264F5BFF7EFC4F4BFB751BEFEEFE65F52F23F72F2F7F4FFF785CFE548FBCFEB2BA1E9AA7C85F5CFE256555F59656AFA9FBA2A323B2E9F58BB92BA22FEBFB111BAF4BDBF5F88BEDEFE8FC4A4A2BCEDEF66F6EFEE2E22BCC8F88FCAAFA9FE70D5F47F735759FD3F335344F41FB2D2D07
-:809900006FC6F22F653D253FD3FB42EEAF27F7C3B15D4EFF8CFC75EF5F1EFF63E17F78F81F9D7F56FE72F1CFDBFB65F3AFA2FA65E57F73F127273FBEF4D65C9F9FEDFEF4CAF6CF6CF5869E6F6EF5167455F68387B3FEC82BAB2C9F9D7CB9F98B299F51F939319F11F399119B5DC5F68C86EFEAF8D6FAFFEEBE6ABE6AF428488FAEDF8B0D59
-:809980005F47F7BD554F43F3393C4F63F376F66FE6F23F777F53F3F3FD2FABFBBAB27F3CD9B7F4571CDF17FEE5F57F7FFFAFAFFFF9F9EFEDCF97FFBCBCCFAEFDEEEE5F57F67E6EFFF7F6E7E58FBFFFF1D1CFEEF8CEFECFEAFB829E6F6EFD16345F62F2D797BF3AF8CAEBAF88FADBC1BF9FF88221AF85FDF9BBFF15F3891D9FDBD566F4EE51
-:809A0000FE6F6EFC96F6AFAEFEEAF8EF86F5284A8FA2FE42CA20024058340084264108841484248C04001008440011812142118304810069012100206281C04860814048638124848522089244F0B8670044204162814501214421100298A02413D24A382525814451A44A52A5442170226A48245AC2824CB2241831221741AF160825A3A2
-:809A800048902180220427444302433A424303A28B84223F83082CF4112485F2112487241F41B64AD141B64AD141F64A9219B64A9945AB9443F24A9143FA429147822DB14F82C4914FA2C4814FA264114FA264194FA2645DACEC49C2CA1F49C2D21F49D228F8912C8B841F49B24AF18124AB941F48B24AB981B24A3985AF2439A4AB944343
-:809B0000B242792498924F82A4944FA2F4D189C042CCF62C121F417628D24132281F4112EA49722AB691D2683214AF443AA4AF4471A4F8429147882D116F8BD412F3A51A144F22C8A14FA2C1242EDA86F5249B9AE2A2FCC12C2ED31D642E921F49B668D841B26AE948B26AF911248F4281F2483451AB24439238222BA447822B946B4298FA
-:809B800047821778403882484002001028412408000000000000000020440100000000002001000000000014F0358C20028342C846224E28A44C3518222789214023A3291F85C284305112D3626411444E25524E892D48233444824978A2842298822E12871128A887522782174522118D1260654998288A143C8484182A34C81F354A818C
-:809C0000212801D0280113863224232442114A1C11183228CB926972282134284823D2A201004D128F21E8423438465214233214C02245B14181C8827011A2485025844288002D12414214B09D4901828CC34846F422182AE4B422962C4B242FA2291252251CE282F85A2145E8C1781236184D21831121D81634128718272416F449942112
-:809C80008F2813DC23E22C2281333165C161148C7251D414426183244C918289AA84412729E4581CE485F8F1E1A0120000100A492111021484811218802AE214322183F424424263B2188224442814E24C12A42C419084108A82E9C8D222082CA14824518394440081410028F0C6B2002008880080080000000000000000000000000000AA
-:809D0000000000000000110010011400775E8004314D1412815C221654812F1181E42258882328911448A6D2134884A831864891418546A9241B41708218A8124E24C82512458411E8122A04253A241CB68109851A12A4592E82294124A1248E48FFDF03218C1211F8241428144614C42823826511D0AA5844B092E522C8111524817A8418
-:809D800048954124148F84B211042358884C3544882D221B11444392281C6844F014282382F58881842502438125E228D842E181982843F827B2002008880080080000000000000000000000000000000000000000110010011400775E302250121123022440225818004002308120082290411005318004630269A8286382022869092464
-:809E000015342290981082D468A148182225342421A288482E4910D114829212128D131321C2259352228C58223459F8982217822CB154D23AB161818412C444B02994282154696C2862A44288241EA1250426C341488D142314A2148D1127611416021ACC12A083432403AF26011126042C8131181160122D83348C081117687021082A8D
-:809E800025611662284442514E238D21C044412D822265825C427013C224498822944267812582A14127114D5285B1429812181092924B8420F4EDA63022342611834231122942C42881241012B28813B2815142B33812001C1404842440A3844322C48828A828A22418154241258294884018C21418A0C26931242822B8F05D581088048C
-:809F00000080441102801162125D18A441002229E88211818182084120341185B1240129B1249462403142290822422D1638144C6251402418082722182D8880F426A6C0481089021844443200237481A442481C83984140042C8401211C79448185084021185841403848884411811491421384C23421002C0188801A4248F2E588404601
-:809F800004200184265848444222200800120051A0421C840440D2250190424243C8620000184148200182102228092352240048004CF8B41790442544081812CC14C824803472C0C14781871361004912E186C151422B24C045123F28213411814E14CCD812E744922281344694848C8432182C846A12F012858824A652248821A289487F
-:80A00000E864F8A27F0048142800D041921A4440D412084601881B41002D84801201119044440029A42840548200822C1101114663414E1190128011844108222B1400B0E242011C412242912812404111884804A60C2424E048410811804282344100848841A516516111408414942224184130221C34141229014C31144C01445042BF73
-:80A080008E489261D082B41104122D28114426440221291222164208E014820814508485438A648C1A6482484062821212302321824281218988388A424149A8144A3842008028DAF702801411D81812022C3128244952428188484988286118113082C0212228443601A24C225422004445B8828191112186B32498611B18428218142643
-:80A10000281102418418838821F86D9E50228002001C240200858488423148501281894218183848250100260114829628412404A41558848447841781248C221111C428008C42480241C024F04F24201801190281481085110161B044D22101002A08484601808A04C24D1241258441314148442424002AA4C24168246821882D42411610
-:80A180000421411821243CF41B1320C4228005188532213023840029022160882280CA282A2104C082C2310040E1E884111192411904122115B412181444840100B0120812211848F05F4100404202142889845448428604142308888008008052A11100814200868152842081462444048044222641B11112210400200888D06A0F0017C0
-:80A20000821012024658A2409131848A4338A8801A02218004704206222826948115548418001F244881140464202281C241001E2150222001444CD442C124EF9502A48004003120428A422C9A2415121109501C149082858211918100C0225012884284A0480013488191811304161C841208844428A3840621F0E44E803482A04321A515
-:80A28000FA22488D3885DDC4F321288863B812F86E6A8D8DA95812F01828A712291471690B3D2446E21C66944BC61C21F21C842D9253457459C4884954D34115F881811E6219BC44F42198148D845E1A23781A7814F414124391864D84144F427C324711D211F628218F24513113B348D21274435213A7742F2952C855C2811F2462288973
-:80A30000E98A782491A1878A6E592837222E4329742392619E228F6A5221D085D2587422728271827349C14281AE838F26B2E2F95C152F22325217481C51514F25C1528B9844184E3289E52295221FC34A62362C51A33D218C82D1117161B22472280295E822287881B4A24561AA311F4868848888489C328CD53118235A4853F4CE842F57
-:80A38000ACF19844215F14D424B111D362317437696F44F6165415BD2262898E636F81B511B42A4234242D4229D6CA6441F0948486F2F97D00000014800118A012C0158218821880210882004028C188C088281828809294284981C28110048502814006882288222C2802006F8C45D111E28682F219591F12B233E325D22AB412B15CB749
-:80A4000038F36979AF8139118B4D4E419F1BF339313F11F1283B6F44FD29699F91FD384887826F6CF47A72BF15FD81418FA3D73BD42BF6386C7E6B8F33F343633F3EF23E3FBFB2D28AF2DD7D9FF4D48933411F15F3573B2FA4F84387AFECD8CAF3F474FAF37C28EE82CFECFA54664D442AF266645E9C141F34E6A6D6A8F21B3B15F91119AB
-:80A480008FA5F67A7AAFC3F34666AF52F24959AFC9FB9781CF49F8D391BF9BBB22F22A288FA2F1E6D6BF12FE39B98F8707CFE4FD6A62BF12F4B9198FACF48BC5BF38E66BF6544ECFF1D573F6F37BFFD951B98D2C8FDD675C1B368F87F71D1F3FF7F7223ABFB47243F7CAFCDA75D8FAFCAA4F4EF9CCAC4AF626645AF5F6F4E7AA341F35F3CE
-:80A50000226229B233F13B31BB331FA5F75A5A25F44E67AF52F271E18DB8DD9C5F4CFC78F99F3ABA28F28A88CFE3FA56C4BF92F698D82AF728286EE22FB6F64363BF98FC35577FFEFCE64FAD684FE5F4161B3F36F487E7F7F1FFF1B172A5DF9FF4F4B93ACFCDF1DFAD2F6DFA4A132F35F7DEDCC5FD5CCC8F85F4ECCE8FA5FE4A5EFABD926D
-:80A58000BD34E326FFB782341F35B72BC6223F33F33939BF93F3597BBF86F6383CEFF5F72A219F9DFE8E98DF98F98D8D9F9AFABBBB2B33AF82FABC8EEFCFFCABE18F8BFB68782E21CFE7F6646E3F37B7B3F9C9CB3FDCFCE64EEFE9FE766E3FB1F52345FF79FEB7A545F56C4CDFDFFDCBCFDFEFE727F727272F24F42B31BFB5F55655CFFF26
-:80A60000FD5CCCCFE7F66C4E8FACF65E5CFAFD24644F25F5E4F66F250A271200602A8426424802608800E088841281024A120100E04412013142614229080065011448411226210882A0418044A241A041206844824D4860381126021C2161241311E841422301961822112A591217814415A824158A4262141D124AE222410512452A443D
-:80A6800043C412C41C417C22E288041E444681D212191502A5160440A44818A6F374EDC0421F41D228F1112483F41124A3D641B26AD141B24A9921AF143985AB9443FA4A9543F2429147822DB14F82E414F9244A8D814FA27418F1244A871D2E4A8759ACE549C25A1F4DD224F49124CD121F49B248F19124E3F48124AB141D6CAB941D68FD
-:80A70000AB9455F84A9443B24A39242B944782A9F92448984FA2B4F50EACD441D628F1112C83E441726AD141B26AD141F64A9448AF16A928AF5439A5AF1439242F3479A4C8316F8BD412F1241A8F14F924C28F11F8244287112E8287513CED48C25A1FC9C21A19D628B981B648E141B24AF98124AD121D2C8D941D28AF645B852B3447838B
-:80A78000A33424AF243124184F8294924FAAF5BE7D4008480000220000800200100800210000000040014008480000240000000000001018023FEA0E12411D28844C816384222012D292066C6144899A882215D492D24162121CAEC2662282E625028D41548652A4CA1185454446216A4459A7C11C0325213A8258A324266444582484833C
-:80A80000C844C8CFB241D324248B7123924194324E171E281C28E321189888942D53165649A39AC42B1858830190412D1154996A222A898284D22248B38121C334C42E11212638824581E114817181484202A4282323C6441601BF7A4931162F4592288D213F41641389C64232A243D18219BA84912CAB82A37926D962E892F8261236B1BB
-:80A88000B1A4A526A228584B431F8268161979A13248CA718865214F88D124915583E814D142222E581453F18122329846F8422270448214722AC2884CB592F4A9B180043C014088F111248111239261407842B11144048D2149C481488120D421C4211502A44C02442722D01214218232244CE21461812F1201211A84D88114024284389E
-:80A9000032424904F057750000282601241122169812000082A0498143E9140146019044422094948301822146948244002641582484A120044A3181424006202B0444F0BDFCF0422436F18214A1188C7413C4124C21D421E28843D882C91119C12125C242424332148A8264261426042A91612A688AB08472220111502E442E4619A2149D
-:80A980003C27088B48842524811518247249941A4AA268418F86499244248829322148598151421833E2884188091C4991928429C125C041805442288031918C888AC8843C064450C2318D2611A3942123886488811748181A44148632141862A8416F2F01281E21161428414A12A1128C64212850821601224223E4442895142A2884C267
-:80AA0000414C04684B242A4148C222448214004922C424182F8401206425200481009B2CA30449047FB801213048491224921834412711134494218662842722E0847281021D28802591484E848F128475111834241681B62208AE4448D0268231A228A0846CD28108382120410812284331C41AF42884DF26071C45A81212481C41312236
-:80AA8000282220C4B651002658144002244112C0811281292422C14143091B24128C3438118C4441240480912E888B4218444B82608224622188249BFE00180011212280148483128204424B4121220040A1482800282280081004201221018C1198831123041140018148228240480848AF1947C2411216484465122E18216B2426840286
-:80AB00002F21D83448F84222782FC46218302B1025942843648512AB122684A941472A4C38612E94229B216F1112E8989124421C6426832982591A1287414F8C82E2890276880C8F64F8589E808124A22146224191212413E11481468124048514C12200A0148242111CE2826414C0242025028C04002F2481522813C88244341508480021
-:80AB80000020524245A894226F350A428230114E211223C4481514468842424251421908222B1212002800139242D022E828022C61112C948418418214C0614280C2C1482B24800820C18422004A28F231394001284284501823022662118123880183B41A62114012C4251200802522228601230211001818286A01C0118601221928A1A3
-:80AC000012412C612418004042F41A255012B28022A2248044024113840256014226C2B24210222821A4242A14014004301221DA3224472200002034442004460128411684C444800A886FAA0F00404401288D1429024280018114221961844981245481641124001308200419240B2541D114621485011B2414404201812289B848881AA9
-:80AC8000480848818CF49F9F20848202301A292122942446829213804928648242204381020020B4214C26024B122A28014C0228481860114C044890C1C08140088A81012E484842AFDC092240D1140210413215242E1140440225822144C1220014241129F212824722B0824624388246E2884444C8424D9124142428241C9A22112418AC
-:80AD000024121054224142008CE24E09000082400480445848481284404204115400444392111400944820043484100228463221240000800A2225828412A11800F094F124284718201198224844002242825400881038456828301143A248102104800820E2310400822242124142882260184008284E28480014B0DA0A84181D440059AC
-:80AD8000382C1321B21104541128B0114262241A4808522FA241081188181851D6A114462102844A91429018A18C112211264216F84A228381A114887032820429728472E20B4A2218E142D231F8422419A2337D327E649F11332B5A12D4B8F9114ABEA86F23E12139324AE711B218A1311322E514C1311BC12ECC4A8121F1C232AF381293
-:80AE0000A61719C19419FF22311B1225B11694A22A84B283F49281AA9A322B1866C2D8A713488814C7C6DF730423F2A114224F112192888F53642426042744A469C1121227421B1415F1C228942331631788658A44C1625F22A42C53AC882F2C2CF431411B542CD314C2226F1B121888A4651F14F1E4412B8C27168F14B84995188B824539
-:80AE8000E248B6AAE244B74268864E49A81FE548D211A4214D2119D488F6311267A4DD4C4651272E484E611F3838113954182D428B648F12F4457647524CE41252416D271F2A36332364322D236F53062F6A073AE85D5C6A651461361F85F44A231B126415C4211D422C42381316FC58486B9156168481A6282F28F4E84C1460120040010D
-:80AF0000141A54142002340000139828001008004A0228110000001042480224483448C0482484244800248242007F294FF224243AA3115B3187824F43B358351A272567411E52BF34F4D3D5F08EECFFD3F6FFFDEFC5F1FAD16E52111F13F239116F12F221211F3EF611311F22F51617BFB2F453577F66B742E518FC91B15F437245F52139
-:80AF8000314F69BD82E381F148181F17A3151F1262342F28BAC288D111A1AA8F8EFFC4844FCAFDA4BDCD1CAAA8EA6B221F5141F165441F95B511F315716E615F56B679F77F653F617413F75F7EBFB6B6F3DF11F196DF5FD1F6FDFDCFE5F5D2D26F62D777F113411B114F12F261651F3EFF32323F36F57615BFB6F652D66F76F7C2D22F3F33
-:80B00000FE9B3B7F6FF3676F1D159E962B7C2F27F36B582F37B352F523A36F76FE83A22F4EFE131B29E1A3F27A784F46F6A49C6FEAFA1E5E2B468F86F6BABAAFBB4CF315541D411B133AF338385F53F3551C35F773743F52F27B7E3F3FFFD3F23731EFDDFCEBE8BF8BFBCDCD9F8DFC645E7B233F12F639195FF2F363611F36FE71711F3287
-:80B08000F65777BF96F473776F56B672B782F8D3B95F59F915573F33F3B7B7ABECAFA5F16A282F27B772F3626327743F34F6CBA9BFB4F51B198FAABBC2BD54FC34842F22F3EEFC2B462AF42C7AFF6248F175549D411B331F17F33839DFD3F37F1CBF77F373763772BFE5F7FBF91F2DDF33F1DEDD3F9CFEF3F36F6CFDDAD8CFE6F737313FCF
-:80B1000012F63919DD2D1F54F661E33F27F761637F5FF76B6D3F67FF66A62F2FFFF3E23FBDFBF5B7EF23E723F3B2B3AF9CFE7B3ABF86F662622B766F36F662E73F14F6CDE1BFB4BD9AF9ACBE6F4CBD74F73E9CBFA2F2BEFC2B466E42CFEEFFF4C68001001C01418C14044048032484A04124124C12016044214231102624022024022501C3
-:80B1800014001A6412482248149A4421C1241648044E2480021FC501AA242142042821100225A2692021348160822B8422428022022A4421621CA02821922D42288844C024298806286048148221482018A84AA39444004245F8F3AFE022F4112485F2112483F41124A3D441B24ED141B26A9921AF2419B54A3924AF1439A42F147924D899
-:80B2000012FBA4485CF9244A1CF8244A56F1244A9E212E4A9E25ACE449E2A2F491242CF5912485F29124A3F69124A3F48124AB141D64AF169961AB9459B44A3924AB944B422BB447822B944F8284F9244A9FD8044FA2E441D428F41124421E6CAB161E24A3A661AF4619F14AB44B688F443934AF543BA52F14518429FBB6481CF9265A9805
-:80B280004FA2EC15D8A4E118C2529E244D5B9AC24A86CC521F4996581F49B24861494AF1812489C1648D941D44A99B458BB443B24899442B94478B8374A688F92458BFFC088480040000480000000000000080018002000000840000820000400428002100005012501DE019A21228143E44A44161388AC1884816216811282B21002F428F
-:80B300008C46858C18423248271350248B4163E1212223889483A84426B428958190A18262C227148E441283B222048DE2818C220446F8AFC10082C0A28062132E124223B24283E1245828484A283828B304984226B82534A88322038A8403624CC88200381816B88324A8414A024AC292228AD128A18442706204414B84288649F4A9C219
-:80B38000B011A214281CF21244A41C93225682B12C25A4862598118E222A49D882F44224AE525CC4C896B52A6828122F11226C218F21D44197348A928848132F53684DA14A98112A3481CAF244322CEA1468448A1328922628E1ACA44285311CAFC90B8002822228411634228A9282121C213842482042210880A24260828B240043022001
-:80B40000D8220124802821E481A28420028848189638422A3442488B84C0A48088F43D6E0000000010020021009082004114000000002200100240040082000000008810020000009F8F4E011E2100200380352418A08130829018108102801894222A0449024221424B8200580033021442130845112A22D4411402004820880226F8F924
-:80B480001C001400200220C42400290129082909142604004120042604660240042011440230814800112128484C9482100242800840F2D715002A010018408201128008008400100182302222000020C4A20042001302001C084181001400000080028CF2B17200800200420000124008420000400400100800002002142C0200114100E7
-:80B5000028880020044002814400F047A7D041220241281436C448282A744102481C09884118820028400130242120A2484381819812000020A128160100481002402CF284480000F0BC4C00100120031812202804000080020080080020416442000041504100000012002008210020044280F84FB3504160124422324B418981A2421BFA
-:80B580008429011C014280A128004C0282004C0212284B8418A082185128350410A18218A0218242208814120C2FC804444280F8F9AF208202001122481800484286088244000000110081211084122441020000201114010040020020028C0400E031050000000000000000000000000000000000000000000000000000000000F04FFE1D
-:80B60000000000000000000000000000000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000017
-:80B68000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000EC
-:80B700000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000006B
-:80B7800000000000000000000000FFE40F00C02200400200000000000000000000410000000000000000000042000000005DE340148412381181124200008001884400980017442012B824C411C932824212AC2488A421B081024711B02408280081004489982421008001F0AA66A02110024D227024911245B288843242009012821122D5
-:80B8000025914400C04411848054412692240024400224001148881222D211294921248805422A0422889F280C4C118412D8214198212B410024001890824C082812460446052644A1421CB14C3282422343288824018A026711B0250880018904214489C8A42301A042182288BFB70F2210024302490145E288248204001210413281006F
-:80B880000042848504108512241402230225010080A4822022492149810448800400F0DA5310341100411A0219A412800820080086181A41048143082A44C1425220A1829044922A014140C22421E0260800404811044588084008228D3B14002A712A71134AD134414834B22485E221484222A8412D212CCCD2848A0634EC18C1582312EB
-:80B90000B9474228942C8E22102218D218FA8B44006711181C919881B08251A42C6483BA9444AD22C322C288F05ACA0016811202271215124882C18210824822481218A8492048582180C2121091228180E228A281228250284140029A34128E1800882448369878499422842288F09BC84004181D2A5D18124991414B128A02848E1210DE
-:80B98000024AE11298C22551C22A044C788CC24146C962569845122A4C3C44301210B621F8814A4C12921522111008A351C144214988489826848126F227E44008AB3414702262C41901006021142B144A18822218A2822218421288260C2248472259C4844422112D4851A0411C91844044148408456184442091C8004240F2E36240487A
-:80BA000024042111284902601544302484800412160A241112B02A28C442990C1110C128144028C424000000C92142220280281226028118F0F1921004800300244842400284001A4844110410044240118451688118289044414482190888160821B0814288041818484400210088871F144445C218182126C168260248481012EB846131
-:80BA800028C84922598223021741803422178646F6C8116C5448432498284D6174414CC88518963198401494B88668245189C414881696CC28402881781A0D002219420261174142C01180111482840114438128024840480428841C92124C12040014284210042140810280014222002148004F5E0F4582129226448D21C0228128C0214B
-:80BB00008125284202874A29281271210426423421144414A180582220A184242088012AC821141502404891188512C492C444806A8A48DFFC0229029943A221428D2123852294225260482005488B428934228CA482133168124302424126410C22701251414143B4AC1481449424478A139281E088C64480048200441A6428DF320519EB
-:80BB800052414942E121C21428468112E488420280424104226086302444931234242048C2828A2278C13248442354842190882224190249012A4142024148188484A04284AFAE4B22141882419848214424428004199884491421548149840811814C48129811218A0220021B8210081C62582223880820249242C120282812A8822369A8
-:80BC000084A082DD1314862481110443414D02414008412150224C1802C084502440042748002260682424A824119A422A51A5268468418071112421628218001612C48840E1C30B160848185140421405495841114A0229425118800825110298168818488A820842C48218882C448421088225B821180821400823941227228132430494
-:80BC8000F093D2001C14018100008B188421C0391130482014D414384848131141830441812146042AC4319C2412483822688024D422E412C4E4837442B21404A24C880820D284085FE303168242C421C021C02144890A29322270810224221422CC21022224222410027022220241244800424127341124002344624124002222233224CD
-:80BD0000002E48DFEE0246198C244402614018124244884644C524148642984270C60118821D883088981584C1414C88742458144884212D49808408C01590212286842224318486086381B15D05326B2B1B136F12F63616CF2266823E6526E62266223F3246984815F244434D22AF7692A82AF6842B1F46B6C4BA38A2282F3BD24552969C
-:80BD8000812286F2A66622AE882D322EB6DB44457688E183F412A1AAC4835B246FD8B221B481D388542243B4AA38242E222F42A82A3246F8E881EE685FA40F1D3417142844897211DD7652228CD2C8D18A3A583041AE24505343F8634AC4B742411B42597161598587B286C482E5F821A189C9446C32B12D418E24916BE1BBA49FC6A4A421
-:80BE00001F4EF48A822E822F55A2C319F3C4482B2145A87C4B818F89528C4F88D34CCC4883F185FB346F3454E865BD1151812B14915314BFC63884702BF2849D6D81374383D4816C18CF24A8D48D895474ED844C91421672C7E8285B42F0C2A27B444ECD535D322568E24F686128B5972626B1415128467356F219158FE245D242B8C2C55A
-:80BE8000122D96AD84AAF214342CB83D0C00008446024A014E12A014A01480810482241181004880341819341819040049010014844D8110044D818048884848044400001244FF43091F57F631253E331F33A2639F17F76F6D5F53F231618BEEAFA7E721F211436D475E157E648F55F66C64CFDEF665613F9BBB6882E616F26D215F9EF2B2
-:80BF00003139FFD4FC4119DFB6F115874A87F26C2E2BAA66A1265F38F8B73D1F9BF3BC54CFEEF6E787DF74D6F5FAEA8A3F3AFFCA5ADFF4F848D8A9F8D2B4AEA22FE2FAA6A84BEC7AF5F8587EE26F4C0B7E733F55F636265F73F36828DB33DFC6F6756597178F6BFB7E7C7E628FA7F21B531E526F63F21D2D4F4AF2E56D5F1EFEBBFBEFD63A
-:80BF8000F665255F16F76D29DF96FA757F7FF5F54911DFB6F317A54ED54F6AFEEC6F8FAA2AE466F284827F7BF33929CFCBF1E8E85F7EFE4F455FF7FFFE9E3F36F36BF9DF74FD4ED4AFAABAF2EB2EFAB2B68FAAFAFEF6EF4FFF5CD4AF2EFF154D247F57F735643E323F73F216246F43F37E3DDFD6F72D2DEF4BFB62A63F36D733F25F9F4EA9
-:80C00000844F56F74873AF36F6C4E53F5CFEBAFCAFD6F6A1E11F1EFB2F651F92FA6B69BF91F1894957BB6F4DCC332F28FEEE6E1FBAFEE5455F52F6A5A77F73F37D7FFFC7F16C6E5F7EFE4D614FD9F37A9E3716BF95F7DD5FBFDCF5C4CC6F2DFFB6F66F2AFBB4B4CFCBFBEAC87AFDA4F6DF9F41E227F737676F63F21337FFD2F27D789FC303
-:80C08000F72D1DEF62F2EAE6AFC3F7293BAD2AF7744F41FD25359F94F7E1A15FDAFEE7E56FCBFFEAE55F5EFAE5E5FFD2F42D2FFFE1F3464ECFE8F43D236F4DEE68F9A6E6FFEEF6B18F5F5CF825655F3AFA36367E6EDF57F7ECEC5F7EFECE415FFFF7FA1E3F1EFB4B795FFCF5C75DEFEEFEF6F44F6FFF8EBA8FAAFA3EBC6F4EFE58DECFAEF8
-:80C10000FE8E329014D014010018840000148454C024828514714804448228314C12119883802894824243026302988400341E4800A041448E482CA2492091289220F8A3B5A01A40B211021D2C672240C32C8F22082058224062824625B84232A130814C622244354844C221A0242246D412096542683219A4861F483226112468891111C0
-:80C18000022304284598A22A2444EBDC082CF4112485F2112C8F24F1112CA3D441F24A121D24AB9419B24A19B54A3924AF1439A42F347925D81AF924488F14F9244A4E814FA264155FA274D8F1214A8F5DE2A2E449C24A1F49C2521F4952281F497248F1912CEF14F88124EB161D24AF149921AB9455B84A7924B84A39242B94478229F9BE
-:80C200003448B84FA2F4B4BEC0421FC156281D64241FC112BC11D22AF111248D941F4192BA5391BA53BB4A39A42F347125C8816F82D4127934D218F8248A8F11F8251A96D1A561193C61594D4A1F88C2421F49D638F8916487141D24EF14B881B24E11F1421519F24A3151AB3443B24A39242B94478229F912482D844FA2F55F72008004AC
-:80C2800000000040042800000000200400210000000080041004000000280000000021F089D2A0121191411722164256618F6164841829741821143524444945C2425C22E812241A022D641302251148744402422582E8A11811849484396512130A58184242214146626400662C2178780A25242BF32A1218479417814E2814437822211C
-:80C3000028588223581219988AA3D84189684241144718150443358283D124FA182282814F1299242826312838228CE182D8843148199182841CB181B144CA8A1E888CE1C47844884819F89F78244CE31443D92613D163C1174D43CC31486531423483D4269A216CA8582D882B843D22499A611B83236828484F22241868881F82E1281491
-:80C38000F8384347224AE8A2511836A42486FC22C126F8218849216C814A81FA42A4459858ECD148C84A2EC41892BF7A03002A41A8128C14C8284663482A219898401144518430154C08444015C524190139C1246542048604281C88028061814D1148341210E114012C28384248448481848FEA0B80120414122C014228241129884406B5
-:80C400002D22848094284114203422461141110448444302001480483C268C1202219018008464E0441214482884B4D7499132213C9214678265932CCD218F2241822A4802D0141184682E54136812497641B881625444614726114A222288A12127116D124CC3154D2140B116FC841A4B9419850480A11426C864248C06284B21C4BF2958
-:80C48000082323522124C123D18453C383912229826828002517348A2225E19278241181849E4441541431422A24C8242CC112F02114414D21C11D248F41A8816B1827144816089048C443964483062258418FCF0E24604216C4215502284A0282312142411822803C44004B2415582126D12104491624024118221416061C8108212B2423
-:80C50000E1481200802181126222418484267448F28BCBD01401142D12D04242942125469484268838477011B442428104A10027824A9212144800D0214224016C04113044496121908140458208478421484394CC2C02C054123F37068912220548D0820460224914022A98444A02422001C0282D818859414264A849D2520C1D5825188C
-:80C5800081413C484903212814A74445B8C41241880442880080410246F458CD2480011410811288041A4202801122110484908444488100000044C0244C8202100114848B1220140218886023411200414028786B012C831131124259926217A24422AA5182822D85181B422A544140588250844AE88C124342948828C601C371147821E6
-:80C60000341461911C02254122D1491C1C42A2188AD448D422E544C8444DC8241260454AF8CE54501680115122100C464234422821484636142981242401438872210841144850264447224223022A0460414364418B121D2821486E8111810022200122441018F42ED8142C44025022203622224C880A88D02499881C9828808A9881499F
-:80C68000288418011486222828A82882232828883381C681084B2C47182482485444460260226042C048414B242F550890111AB62101206141422531431928B41A36422A242491484814328501281889044D414C02402421564100C0121884278150421934118182250841822A0400001F46041004204441022008000040022444222120B2
-:80C70000624225D422346428234481381218113B84490190A2628227142F141A01428214242800C142228019F8548D00266241461CD4420511442618B1282152D26051433184138981411406194141C1114C0400149058706821C12812158204442962222C0230814D42A280488A382420E1394C6129004CA1214015140129C88121908230
-:80C780004C081512810820830880021482410023084114200C88B08402860410045024002302124963C126F15EF78042840225418451182229C22244145449124241484482F4648121006214002A24C2424C021A8211A4281124404181144151213441008594262400812322F1D24B601400190219028044A514208131118168A01448849D
-:80C8000018205281004A0251001243028C829845185413B24811082C218408248584088024182808E05D0816210121441602104348868208111D2249D816121486082CC842C850222482814820587A86848441E4620420082002221012012A240448844A4128F4A1968022924442188445C1484400C48022022028084D41212159D8241117
-:80C88000841824C2111C824121123822283C0C4AD28491112483022244902143A4420044E424302285F43E471061192564247D4229D12431196E44676249D482984199B12454484CE413D84D2864444F42B124B8256812632284C2215FD402482F22F33616A692429F48F4B4242E41422712567B5D541926052B4631312F489426E952227B
-:80C900004AF6428A87A216F4182587222DC1141847623AF111317011B1117424DC21F288812E111D31297312E629F2855913A128584F48F313491B8989916249D251F4214257422AB422E844E22809A81E115F56E81152315AF291939636812D624F2A98356E611EA2471882952B644A4B42A6986C1889698A4FC5F58DA7E03796324D22D2
-:80C98000CF42E441F3442C27522D4165D181F2C3A283EA28D894D453B922FAE683F57CD293C2AE822D611748C6F2C18E2C511A2F35F4C5868AF52181F0948486F94AEC9AB22489F989862F42F641B889ED9AF842642D82335811E44537442EC6428A52464423F864684981F2E9B91400501A7048038D13D018018522514850281224842438
-:80CA000016081608250815684121124100501400901E00C012C092C09280082C084C082C088880F81817F014366D348D38DD69AF87F669659F95F31A642F85B6CEEC8DFFC1E98F4DFDC5D88F85F5DCD1CF1FFF667A3F85F55DDFFFDDF9D8484F8AFA6DCECFECDCFDF4373F3FF2D631F529391B414F44F5B4B48FA2FAA1A11F18AABB8FAA35
-:80CA8000FB8A988B885ED87AF2E5BD9FBDFF72726B9D1F1CF9819149F88E8AEFEAFAEEEC4F46FAE4A44F6EFAF6F44F41A3AAEEE82F940E4F61F16C664CF134748F81F128255F94F3156C9F95F6E7E8EFCDBDE8FEE8E8BF7DFD525DFEFD8F9FFF6DF21FA5F5FDFF5F7BEB4EFEA4AADFCEFFC4C27F7AFF373D5FD3FF6173BFDAF135454F74D1
-:80CB0000F5B6B6EFF9FBA9A71F5BFBF9741F59FB8684ABCC7FCDBD72F7A5BD9FBFFFE6E6EEC41D133F529386EFACFE6E2AEFA6F662A62F4EFE24244FE7F7AEA8CBAAFEEADD22246F4587C7363D27CB337FB2F2733D2FC2F742626FA9E14CFE1B332BA4FF2DF9D39867BCEF1CFC323FBF57F7E5EF6BAE6BDCCBDD4FEEFFC4C65DC79F32F21E
-:80CB800019775D639FDBFE95454F7EE72BFB9CBE3FDA7A83F191519E9677499F39F912BA6F47FB5585CFBAFBE6E2276633F7192B87A86F24FC6E2AEFC6F6E4266F46EA26F27E74ABED3AF328183D71246F65F522722D16BFF7F31F177FF6F673359F72F7436FEF6BFBC2CE3FB3FB5BB17FFDF9D797EF7FFBFFF9FF63F33F767FFFFFBEB81D
-:80CC00005F4FBFFDFFE4EEEFACFC37E78F37F3ED667F36F6FBCD5F53F464762BABDFE9EAFBEB59FD95541F79F99F9FBF1DFFD7FD6F4FFF958FDFBAFB77733F2EFCB383FFB1728FFF67C2EF8CFA6E6E6F6CF26AEE2F28F8565CEFC4F6ACA48F82F38D1FA012800143020022004800A0414C32114C22A824114E246044114C12A32488422AC6
-:80CC80000829286412A082B02488044826012682044041C8244828A024A024F0D649F0821244E0414211A1124446534188284E81435812132804885B491C28081382084615041988024CA2821B21291881082490888AF242812821400125A64200214D4821478140FB39EBE032F4112487321FC17248F3116CA7141D6CAF16D1C1F26A93B7
-:80CD00001D28AB9455F84A964783AF147924F84A914783AD914F82D418F9244A8D815FA27418F1244A96E5A2E459C24A9E24ACF491243CF4912485F2912C83F4912CA7241F49F64A121F49F24A921B69AB9453F84A9243BA4A39A42F24F9A44829F9A448984FAAF455AF40EB4154121E4C141E2C341E2C2F1461C12F547911ACA417812FDC
-:80CD8000447A34E8347824F8429343D352B836C4814F22C5917F22EC11E82265592D5296C15B8E252CF591283CB481C6128AF642118E24AD131B2946A22185B711A22459F24A1243A214222D124783186F8294124F82F5B7D740188204000000008002000000100200880000000084800400000040042800000000002FFF024C0160832488
-:80CE0000190119C624242820181452421528B41308881C4521A842FB4217444A7198641222291422E248D234D92188382444926C62414D4113812491415042812A240140188434484BC3141CF286111145B235C4242D158C41D18488C428904855A8242D228489E4521194A44A5341C348424241512444882E441E8200281B2111273C173A
-:80CE8000C21B8519024D8A342628D11288A448D042F232488D32430C1E2182CF9D41B121F14211B01CE611C625111972215424490640D4B22262B246884864288E11132279A4F2C4296D41585F814815B48134628AB38AD261E132085D62C6342CCAD24311951445A2121F2231816334482E42444A7328E2E814A44312CF95074144145025
-:80CF0000261269E1810486088C82C84844491402AF143131444B424A113548003160222821444084082E914033914D112842178827148442008220132A01008E489E66001110C1130048249018121482744042882188222A44681411441190C44C0244412012019084908648464208821411858204808284212844F86EAF60452228498163
-:80CF8000823114612E442E821CB2821452428214818E554C22644914A2530A4D42872424FC7118714831A28C88E226C8842828B022146A144948A484A68804A3E118442AFA48865028833244005FFF0E1814224117223014424582322A8A11018214842F81B824A1848A812804466114E125D2E1E141D81884624844282D24110021218E41
-:80D00000458E4446C4C888C81191488429128C8234184908819726C0442830111818504262821C714242C2844503C04500433221A8DC0A444211C0496C821888A284882222E0464818021032280029D1388884A8482181232284044FFD4D116842200111124322261181C22400A048200881472442411A4818044008484B412B1828240018
-:80D08000146018902226D8223824198248426248C88841002E42A0848F4E0368244E2322426221344143B484068AC281404688842112420A2051411308C718281C48048440C44A444C4A02888064848A21440400100422442588A121DF9E01200134284185A414001018024200441142882844482240C84242448082924418C241881042BD
-:80D1000044182848044048C49822001824004508CF814581A612282D31421744214D1125C414288C824881449488411A28368A8448448A42410893CC241C0818478512465442825C522259D828C828865A289A224248B4827182849C84182C1234488D146AF83463004425012382921C6862484E8110220830424814004B4244485084549A
-:80D180002C4444084B424E242988820861820000628E4490418810280240042002F03573A04210931411C901200415026288C30610D482E248A42482148E18248B84484242893621842CF6442843122512181738221C644443022A5822811883018DC42D144C8141A442A0421B9C401E293221250C2B161225E81482880241601447888419
-:80D200001CC4239025E213E288E41192A474004800821B484044041C4494288532518F151838181813081222626698445800B01103184A021004434204002481240027226042803841A048855422282398844421260488298418020000848C52422984A58424482E5800221825C8182A01BFA102841684022002004425020043382411225F
-:80D28000308859C2882C042141118B12891201422D84004240642A5021111E21442AC4128902C08144184622E88204C082812B3A20C84814183418294102601A2222822E828008863A4100108516119441801443821232AA0028602A26410240486428648281C062248224628608D096084924934221424248208424844412044E28159490
-:80D3000021212415A242392882283149B08184982C60844942D1815225101405A98204438ACA244001884144108208C8182FEE4C61221048668181812124134A088448848284832864821078240820048424A0848C0840142402102804228F148151181489C8128844218B81CC042022A184EF7E0E125440A1124C4212042514022129142A
-:80D38000C286D041480388402654122485C226268A4882821848221648D321240250414061148213041304005082284283026E8A0080042414412200409454C042202444048441251888912C888244974284501800860A8CA6284AC848201102C044C028E0846A888B28800A8823648AFEE480F4885415524195E446F254241624E4763278
-:80D40000892F24D2823384C9EA44FC44816738ED442E89A7149952891F92F5888A9C786CD718F82663A6722A698483AE283B221F28B22252382D85871C6F843221AF8285F212C98F12FCA13AABC13788ABC88BD88D44CFA47996E8CEC1688AA1A62EA2BDF2F014266F2712BA2431566D1A2C111412B3420226B4427CA2FA272237881F4257
-:80D480007A41FA4322114F5EE8763A8863F64D761974C1CE885CAE4CAD242C764EEC54FC4244E4C41B283DCC2E42AD614F54B215F52D361D2823618C141145EC8722FA686416F232844E688B4156F836BAA01615E91262312E1B93B12AD422C24A49CC83228F2444E644348887428D482EA18F48F4A4A28CB484F446A21C34322D286B6363
-:80D50000874CF7841D24A6D286E822388C4F1218B524F224422E2215417811726A2D7CD4B2485C141E9256A9276F28F812642C986A428B828E128B48FF8B0D40012100A0124001000000000000441008001004000000002484248440C812C0128418C01280011800CF3D4FD164F416178F83F334751E123F96F65C5E5E425AF4E4E785E810
-:80D5800026F67A58428FACF64E4CDFC2F6E9495F76E6A2BE23C249CDADAFA3F243C86E767FF6F6775D3712C5FEEDCE8FAEEEAA7282F6A1E68EE239722DFD2C6FCFD6F6646FCF46F66D67BFC4F4D5CD1F9EEBAFFADAC99F38F99BC18FE9F8DE8C8FCAF3FAA2EF79FA14A4AAAE77CECA9FE442F15452FFF7F33B3A5F53F351523F16F65A5A7B
-:80D600007E422B417F7EFECFCE2F26F65A5E4F44F4C84AAFC6FAAFEC9FBEFEEBEB4FE67EA4F4A24DCFDAFAAD3E8FACFCECEE5FE7F5634B3F2A52E5CF62F4ADED4FE252729FEEF641623B64D7F2EFFAFC2C6D7FF6F6666CDFD657F97F6CF1F7BD2FAAFBFAFD9F11F899F1CF64FFD6DE8FE3F2FAB2EFECFB56B4AF8FAFAA2FAEFEBB69144F4F
-:80D6800064D437F41F3E5D251F23F17373EFE1F14252CFE4F54D4F95AC442B754E46CE46EFEEF6AF6FBFBEF667674F66FE27AD2F84D64DFE485A3DC84F66FE67667F57F76361FFE4F4ADC48FBAEEAEF6C64E1FDAAECC1D445752DFE2F2EA68AFA6564E95F24F467FEFFEE3BF8FA2FBCAE99FBDFC83C1CEDEEFCCF8DA2CAFA4F2EAB7AFC211
-:80D70000FAFAB82AFE88DAFF7441F14442FD63FFE3F335251F27F57365AFE3F16256EFE4F5CFCFBFEEBE62F656524F64FCCCCEAF86FEAFED5FBEFEEFEAEFE6FEA6AC4FDEF6EDEDDFEEF6ECE6CF66FC7717FFB6F6A762FFAEF62D4C8FBA7EEA7A4FFEC5ED1F34D4237627F7EFABEFDAF62F4F6766BF36724BF7C7B63FBFFBB28AAFBDFECB0C
-:80D78000DABF1BFCF8E66FEDFC667EAFA5F2FAAE2F417A68E82DFDE8CA8FEC054B120020420848228A240260884419C4268E4828828140048B24114614A124881036484B82B0260827128449487824E38124A248A048400848288C84024E24828B24F0A72FE028A4211416F44411168441245441422004818A44045415481491A8481C1868
-:80D8000051484054818B28884C822444014511018C128254181594828C521A482D8145D82838842484890800DF28032CF4112487321F4132481F41324A1D24AB141D24AF149921AB9451AB9443F24A9143F242914F82D412F9A4481CF9A44A8D816FA264114FA264192E4A96C54A9E24ACF491242CF4912485F2912487241F49724AF281C7
-:80D880002CAB141FC1F24A921F81F24A9253B14A7934F84A9243B342793498924F8384F9244A8F8E04BCF411642E4317C1A7241F4162341D2C4E121D2C2F74F91128AF241AF54AB243F2489143D232E982C49567822D114FA245F126D216F126CA96F1264A9641E959D2A2F4912C2CF4916485F29164A5F2912427241F48F242121F41E2FF
-:80D9000064F91124AF24BB15F2429243F34A9243D322793498926F8394924FA2E5DF0A848004000000400428000000002180118808000014000048000000004480020000008214F035778064224321514115B811A22420023821450310952586C862C41382928822851148FC28851688087028220886641810914C8E22941CD58198488440
-:80D9800083944842844938885280B2280485748A06492218D124E221D2240193C12A881B844286628547218D5684233566CC286484C430C8433442368334462123B26A883141663422212227848AB21124828A122103C08119032445F82412160826A928DFF907484638121A524147111B212E5181214F1844226A541845581646C4884EDA
-:80DA0000AE48463124A3A9487C44E842695A4E1C27281D222E8883B289644643348124144E248E618D211BC18D814189A2428994418D318624984636C4228962128AF2E7423024284541F42212842184228A021A46628125A6418532312F44028564828190288442153A482100422C01248A1282324886C812208272482111088800848900
-:80DA800001A9811458848F6808800220024302222820088200444142824A128452814C12110840082A04002200442248400400402141022002328184007F1F054342C2241C61A11D181B812512840C218211484A28C241644C05C24B484C28D4421256494954428C1C86946823160343429185824D29888693641CA494101444816248896E
-:80DB0000C4836684386886F4C251302428233211241678240120028200424A98244142630C498CC68842271250494465A8484982A4422502104411211888189146A05811494114216248488A7142C88868F0689B0010043648E121082742C824809881003041411262C08445614241A504484098421088C6218012E44882D4144224886232
-:80DB8000140000212012382149028143F8C2AD808422A4218B2400140013C9248916042AB128A124009810D1272324343C3800CC169884488480042631128A41024B242420C61499040082411048825424AFBA095012131412511236813231424304292A8414284822D8484454248009A811428CC964863124130115CA441A0420044881BE
-:80DC0000304842604822482182C0422A082602526756C01460414112490121302200104248944250142448824604A24100410040188404800884C521C8231432004004242C0200888284F0471FD024912159D14223D543A121271216212625F242884924F42C122ED82612D424A448001CBAA2A424441A961846D4146882CC6944198404D3
-:80DC8000882661851D94C833E252E4228124226854002182488A122802421FC5074800702801146022C08140028100481C48C8144368544110F418216048228B24410010260110420884218C0448188446022C0A648028384845F2FF5560414890244218482242862504004622A22C4180489181005140014581684228C0248088B581825F
-:80DD000001134C04C022001200412382048850488512F86864002824120028691482248212823C8414408108807244C1814220664224603411CA82641200209E24801884482102198C88A848902200824882487F6106102102452204400211602488244022E662A1424CD581041302271250129225A8212508CC2A984286144294824A020C
-:80DD8000820000100482680044004886E4AF074C4494410049020048A8449024304451881144A210B2443124008280242804400411C81142444C9421C84328C421141C24828238441088043828BF1205822141482002220088138258210022001CD22A28028C048828904888C1E8814221421911F42214D16018004223048B864C480183F3
-:80DE000014129248838814084F234F82D3252271140243010051002509328850248A644840B822041B8489A2842228841C44684684400C118094B48C167441C2242848412849042130448843A3824948F8A28D008024820643D412142118A248A024178C11821100908488001249084CC8218220084E288AC2882288008012021444800208
-:80DE80004014341811901C5042CFE20E42002C243242104411220415143621E83B142B24113D484A22448242124552A1502120381286612851250624826012111429081C0814A82100444A62847024219255242628C1540050422448008E448002008826041190222418423938441382044414C04584281E441116410129081364184604AC
-:80DF00004A12C12444280041882981FCC6B3244666481AB32424C45445E24236425CB4A19481A9FC81C48B561C3C6543B4F198453F829CA8111F4CE116F4312B1B4459D28198882EBCAB8C4E4CCB24C982246138167428F55461CF5C684831222B2246B1B8384413C6C447444F42664487124BC8CB969E338B247B4730244F1156412F45BB
-:80DF8000C3247A32625552114B8829A26614411D874E241CC8252D21CEA14B2DC648B422524448288E41AA658A5718A48AC2CB1F42FC84244F1896241B884B882A3821224E835DE14631811119AC884F2AE22A34424D1886E48681D49CF8224C3F2A042B71172241242F2214C64423C44233A48486526123B48232A32F28B7A35C6427C2A3
-:80E00000345F12A4E6BCD4213886473227E24D273F34E424F424613A684AC6F342839D963F42F924733B5417482CD615AA48276C19AC424F1464584D23902A10E2845C4886EC42B484F8A359000020480234602200823440022448240082100221108212020021100221004002418200000080040012F0481FD0647456F434364F6125E438
-:80E080002551426D266F46F62626295831B7864764AF9DF747447F45F56546319FA6FA2A49DFD6F44541DFAFFA67E1DFE67722F32DAEEFBEFC4D4EBFA4D6ECF45A7C4E46BF54E226F6D31C9E123BCB8F87FF51748FD4748314F127263B22AEA18F94F844444D466F2654AE6F46F23434DFCAFA1C1CCFC1F11C38CFC4F6FCC4F014462FE126
-:80E10000F433236F63F342224F65E324D432F266255F76E246DC31F8CBAD47448FA5FF47C45F7DFDA5C61F3AF86CAE9FB2FE2FCD5F1EFCADBC7F56FEEEAC7F56F268689FBEFC4D4C9FACF4E546AFCBFB29CD3FDEF2E6646F5BF396357F5BFE7AFD1F5DFFC8C873F8C1C27F76FA82A41F18FA68ED5F44FC84C66F6EFECAAA6F46F23634CF28
-:80E18000C6FE7C3CEFC7FB3434EFC7FF7AB9D064F417653E362F63B352F114162F65F1662675552237763F3EDC8BD235F8DBD877547F4DFD65433B868FA6FAEB697F5C7485F1ADBF7F54FC6CEE3F3252EC7F34742CFFEEEFCFF4F45A7CCFE4F447AC5F66D243ED21B1B7F1597C1F5D7388FC83A46F62F2A7263F48E218FAC9E94F44ACC845
-:80E200006ADCAAF846444B774F4EFEDCDC6FC1F184AC4DBC2D64F01466FF71F233272F63F372F22F21F752167F76F247453F3CFCE3833F36FCCFC97F1CF4FBDB3F36F6F3D37F76F463C7AFA6FEABE9CDCD4F18F8ADAF6F66FE6EAE7F76F26C6EFFBEF4ED6FEFFEFE6C4FAFCBF72D4A7F6EFAE7E67F7AFB93377F6FFB5FFC5F59DBC8F2875B
-:80E28000A56F72F267A72BA81F1CFACDE95F44FC85C44F46FE4EEE6F44F43E7CDF82FEFCF8CFC6FAB4BE4F86FFD7A3100469012981941448418A448244A1484482448A8432814A12011144111031481908888141E012084F12094F1289C481E0128844210882248A440244824A22F8482482AFBB08184C2202C02441282120020042228052
-:80E3000044141498442841A84302C024482847828280924480018034442840248402401484A2428110A8410073022CF5112485F2112483F41124A7241D24AB141D24AB9419B24A19B54A3924AF1439342F147934D812F924481CF9244A1CF8244A16F1244A96E1A265592E5A9E242E4A1F49C2421F497228F2912483F49124A3F48124EB67
-:80E38000141D24AF14B911B24A19B54A3924ABB443B242F9244829F93448984FA2F4AF3ED0A2F4116485F3116487241F41724AC2248F24D141F24A951D242F247314F842A25783AF243935AD824F83D412F92648AF14F1245A8F14F922CA87556F226C186D5AD6D192655C2D5A17C92D4A1F49D62A749134421FC9B242F1812C8B14288F5F
-:80E4000054A921AF54DA84F44AB1412B94478329E883948A6F8384D8A4F5C1E5008248000000004480020000000000800800001400848004480000000028000000002501CFBA0B181A02128023C43161424890811C8444D841462A6A288B1443242802218344E89698124284B22B84CA3212248888C0481287182004899881851122548238
-:80E48000478460498422A0845F260C1C34841285B21456430028CF18027628544223C1912082A4422E818E28D041F48C41422014A42445D16278480429E14482881228FE14A12841274488A98C84C4141A2812048904A849C489E0CE0618E212897132E4428194316932E541812ADC42945293E8545228C2CAF223124B86E051E2F824C8AF
-:80E500004848A6214513FD866A4E8387254B25C6822AA8248F41A621D93844C26F8834884E819D143810C2488C24E8A28852181AFCBF13C0411604602411004028A461141120012228B04848888804484078483422468428018A0200848813081002800490822A5448413014904488D0D602248021C1124002100100828044328142120019
-:80E58000001004238242084182418008A0281011040081921400842082010081227FEC06161124424471146212D1812D928E421F2248016C748891AA47A22229A242222886140114851462721C38B226A4284B4A25C41431A42C092E8813A52929B42188642113B111D8422583B42494125E24814A4AF8E5B7901180425421205252842130
-:80E60000805812827042C12827B26229822202004160422352142127414C92248A66481646E1288218C2A41C242194A15021B081315220B2342481462808FF6B0324441812184D121484D021A984390260448C98824308124820C28414502184902886818A284814021028111128211A12A894181901C1384210C21430688932AAB0241145
-:80E6800022544A40714408181D1211224C653890822604AE1840C142C011430820E4828832841031824C91848488C3229211472218413081944E8414882302200223842644F4EACD142032431311124441D1222282D882C4254119848181110129E828828323A286482841601211490428C028309142B0883421424C08D042128424244203
-:80E7000044A82488898861851F2A0219142401280022131404242004202414168C1484542842101484249448A01818464212440850221240088005CA810121421200902CF0166FD041514213113C22148964122F1264722C38284AC1461324985442431A5812281A96292E4490442694244AF2A548C0D2A01249481498BD6815E2C994120C
-:80E7800049C484889911B214EC21881222C4184A12E288E6C641F6843FA04228253211405414C01212144825318124122812AD11414AB8840424882A0448830C00449846542228884022219221814081A484114248284128A084008CE4B54203218191241044944180240488505288C08831841C881241848892A490227084011514011110
-:80E800002052160011922CE4120149012A8181991200181822B0920D4449B2120414111A02100190421924022C7264119248499828251404544114004183B21C24A7815604828440A8821811435884501227888841278282222D142002126FAE0542112002101211F28226882D4111411429421102276283043C84D22268A21302942D4244
-:80E8800014250284211D2288B125322825110281801243190180422428928220B84CF28AC20042484A012B432829024628028884CA012B14881C4411419482981C41416214211182496622C0268489223285826E8481AB38511B12A0122AC812A01648526907445218B027018A6142271212004440112524485425484562444591220061B7
-:80E9000081902441854402C34C084810826818491808882248290800403813104A64213012484A022F140B198241081240210210022F2188021C08661808002748100223048800200112841800410020021C011012044400200212F03DDB200418941322810162404124844414880288C26992812815180820964430211088865684212418
-:80E98000104198858001D0810844C0A41225088A8534848544F81CD4401183322228113415042A6818334A0182A2450112288228B449228242084E381CD884417224021B841C6882339224A23911830828244823814402201264422800587F680B1A021984442812C248250222C44382120188884883481118021C91524E82C1442C2232F5
-:80EA00004A1C08812E48C0481908494232242817216041841E215490448582148824D282C4224F54062263A8124E182611D1720337142F4222489B1683B491F42C815F2B3C62912D4CB494195462FCC2D553D272741272A194236D6C4FA726B6B27A21F732289F48728DD263783C6248A6F5132C1F2AC22287128D13CF11D4556362CA13BF
-:80EA8000A2281E824B4A6AB164C1445FA94391121D4485FA3141701221F1262D24D3EC16BA41EC525C534F24EA28F242244D4129B861F88B8486E4C2983582C562A46A48F842C8C5018B18ED41CD12888B88212A629A4EAC2F12AA31B014F5121919FD132C2B181212CFA2F4141616E6C6B152A1E11A7248722D075F35E633F2132189F231
-:80EB000019226E3253D22184C6833D422B2813BC8454123544F189A6EE5A8F38B224B42DFA8C232E8973B223D24AD685F2CD643CE2E3F8688325C4321F14B4C457312E8B2D8D49728351A1AB84AE91141742272182157A82B2447B1274E8B866952628418F88E483F3B44C0018003048100881302810088100004880148804100881000043
-:80EB800041100400428443044A084A084E848008A880084C084CD8A349E2247551E132B223F4484813F2652E7FE256EE6F6EF6C64A1FB4F4D9DB3F34F4CA68E7D26F64FC4A885EDABFF6F643CC8F9CFCA5817F79FAE7E66F42F324442EE62B7FCFE4F4329AAFE4FC6C76AF6DFDFBD62F65F4B33665FE8283BF3AFA1D36AFACF4C8FA6F6CBA
-:80EC000078C6F559FB9FA1F7D39A3F5DE125BF46B49E28F85CC82B444F48AC885E484F84F2CFB3245AF739519FB2F21B789F94F4714167E57FC2F64F4FFFF6F6C7EE1FB2F2FBFFFFD4F4C4444F32F84FCF2F12F2D2DBFFF6D6D7F8CEEDDF9EECFEFFEEEEAFBA7828F9242F4F3FF7C1CB3F93F949CF8FA4F7DAFE2FE7F7D343FE73BCD2A2ED
-:80EC8000F64B4EAFE5F5E7473F2AFAD7B66F4CF14DDEBFA8FDF3BA3FDCC1926F4EFDBE882B2AEFC7BCD2FF96D665F49484EFA3D647497327F31567BF32F33B315E72AFA5F74636FD636F44F4C8CA3F7E7A4BF35372BFA4FCC2C27F74F4E6A6AFB6F2F6F56F54D446B862F46448DFF2F32F2DCFF6DEF6F44E6F6FDFF3646F6F7FF7C2457E41
-:80ED00007A6FEDFFD7FE3F75F193F7E57FADF7292BBFADFF42625F68F393923F32DEFBF6DBBAAFA9DB4BFC42426F2EFE9EB2CDB6ED386F6EFCB4D46F42F14858CFEEFBDE14347F12F23537BD3B3F17E322F23B3B3F34D33FF66E6C3F16F6C3A69F36FA1FFB7F44FCC1C19FBEFEAAAE2F12FA1EDDDFFEF6EFEDDFD2F224889FFAFAA9ABCF0F
-:80ED8000F65CF2ED2FCFFFF7CCEEDFFDF7E86FAFA5F79EFE6F4DFFF1772F59F72C2FFFDEF22D2FFFFBFB8FAFFFECFE97B67F73FF33773F37F31A3BFDCE7F71F16676EFE5F73CBEEFC7F562726F46F7B694CFE7F5ECFE3F34042E116012E012014B1230248A048214821413C824484C22E84432814A0289024A024E2451422A38482A012F9C
-:80EE000012094F12084F22C8482681B424A84126C248141A44012C62816448281283041B493082100A1001114115240414491402004CC848428442414A084448422A6C48451808444810484482D42888D424896424C0128C4412848124044CA14240E373052D421F4152281F4132481FC1364A1D6CAB141D2CAB941D28AB945781AB9447A4
-:80EE800083AF147924F8429147822D914F82C4954FA2C4814FA264114FA264192FA26459ACE449D2A4F491242CF4912485F2912483F49124A3F4812CAB141FC8B24AB981B24A3985AB9443BA4A39A42B94478A29F9A448984FAAF44E86C04A1B2489F4112446F2112C27241D2C2F24D1C1E2647911B8427A15D822FB34482F347835E834E3
-:80EF0000782488F92648AD954F8285F927CA87117FA27C98F1225896D5B2E541D2A2F49128481F49965A9E24A3F481242B141F48F242114CF24A9419F24AB451ABB443B24A19B442392429F9264829E9A2F5518B4008480000000044800200000010020088000040010080044008000000280024000010021725001C02C0441384841141A4
-:80EF80002298821C289494874140125842838421A6844284A5314189C231481E24212CC382004C11C8126C8C9241C05A8728282111472122400829668184C0283FC7084A3294345B1212AD1464535442911415184205293223815974283285818885850862833286834812D828124CA1842D218CD232C888C018AE1E1E88471A488D9184FD
-:80F00000442368A4C4212D5889A148881E414CF8778420E656014F116645471549D422154101A97823243494A7423902B5742AF481448981FE1A84C88388D629E68872B8C1429F4172227828748A612466E1E142C318272C3678E866884F14BB84F41AA32658414B18A952228542381A569A88E0C972210B0034404208151444D812188183
-:80F08000180512402804A1001904248501440000290129086088884430111884A10010825448A0142A84084A012309E041120640581444451201008CC41245480320014120420460A28F440290164C820448441844008844C04823120180285222004984A24881F058E9342A012651182266A1212D52128DC22CE21358214427181A1C744D
-:80F10000582432425F8AA4484D28C1272A47344C76120427242A6926812F629844231352628F28D141314221314B424062A4128951221849688585341245084351482F6545A1212CC1258428481CD12644448272124152288631881512883242858144588444214C42DCA28284C224A42C48A4426123817911426228444242C04121162800
-:80F180008892848C410641888441AFF54E0226041170219824182CB149088A423144186915B44401124B2C4368422229DA41D422A4124304272956C22449863412105486614240C1248127228418242418258214B8446182484941F8527F302460864042410C2810450140088814918127112449912583A882002A544884604248511A98A5
-:80F2000044152408118A9414444782418D234811482140828498CC2120F1E8961448252404002130462A4448684562482442642002640026C2941CC12286052B146811C4002D48812302821032C8901500421240984440022348F854282F81046021F0211430148052180022400C814481121E4449041480044334148012042C24088081A1
-:80F28000811138424422000088102812061E282608813684F83BAA144936128CE241024711C4C06D103928424528048A54698CD124E71144D41461428F2442B415B41472C241FC124C22482FC814E52821711138928419B4449834874847821197228214482902448CC288278484CB21478E1F9A0D401412410221282168108181144858C5
-:80F30000424041480410812802C0242280C424004014844222480242800142488901A584B44221C28482002F550513414101490121502628A5221202D081322216044139423428002512185282A484654214122411C1238C741441084608281842211D841008D698228448164854483FCC048444B0434241042D24200818D01A4819528485
-:80F380007026824882348428288814479134490116082822401218114892293238902C40021D8448222143119212608482BF5F0523211208C44E218148842D151681648142121544011E42111AC818128582042C0120820138C0185818258151141D1810022506801448542481A0282860446024BF580C15384829E26401121952121800DB
-:80F400001D145084291832142D3151831288522C48B02CA482428D12888546442814E122088086DC4202241029D881C4181A381A2E4844261C04A2222D18222D66204244212142854114420421648A014362154B2886983814450884404891B44F1481021820064612A121B58414A112302200188811008482000044842F820F84190220AE
-:80F4800061230013031604146011812220632843A2283A8862A814834121C212322C42448841C42444281A8251439088188713284924748902222E1484128C34382B24AE127FD4074210144E13088711418122874200874818400849840130844342E64408406444400248141280118AA44889072288C01180042C2494122BC2884112F09D
-:80F500003445202A28429122213218421E2A2AC444142C01248184141188D24012B84108AC48042248129041221044022314180419119211814C042722008CBC4831282114489F674F4218C84489224848C1282601403F141C021850122984440421C8183044422004882689684215088C0C6042122148A5145168511A22C1144B81008611
-:80F580008321F42282F08B9924397585E4E2F248231F13781EB133F24C244E12C3D9A6D188D6C1B11AF884192CF3152A4FD3E1C4A388884F48C6B685382424D552C78504D022827262F8544515C2258BA11E28CF2877326D3B5E3EA722542D943CE361E811E5B47826F26C8426B41A92318FA16146C75687CAFF56092A62BA15B137C532AB
-:80F6000042B427A14D2C9C92212B1125C31E35722A5158AD8235F16C696D298F867988F824C2A97E4AEC11A44E1FB2F1227287C1C147A28819E24971137227D6311413ED442122741962889F85F44F581F24F8141483D422D288FDE48887812BA489E411AD4117A71416916841C465FC213E181F127133F122167217364371C1B118781503
-:80F68000BC6291214F23DC63F1B114233134CA42FA85E12FC6F118936B41C7496F22E741FD1A14682E186E611894AF4661D54E72BD28A9A4296F82F3392140718C34891E6C8CF1D6226CF1E2C2AAF414388CF242A23E8714422501858114881488D4188814880400480000002088020082200882201824182448A248494128042482244878
-:80F70000A04880440620089B26242F217247F72F2FEF41F7CE664FE5F56F6CBF36F62A224EFEEFA4D829B149F4465FF57D3B783AF263633F3DFD6F6A6F41A164EA5E46A46FDEF636746FD1FDA4AD4FEFFC96982FADF57EFCEF45FD95F515E3A5C9832BEA27151F6FFAABC22F23F2B68EFFFF7C49F1C9C19D191B881F48F8E4E48D5C4B235E
-:80F780002F21F4A78E6F61E8C8FC54446F62F6FFCAF0332155F5252F7FD256EFDF73F3163C2F82F33A3E8F64FD129E2D3BAFC3D37FF91FBDEFF17317F7CFCD6F5DF94C4F7F53F96E6CCF47FF3C9E4FECFC667E6F67F76E7D6F56E625B4F6FFD7576F85FD56D5DFD9F9A5A77F71DFEFF8BFF5BF8DBC59F43F1E4F6AF92616FF7FFE23759FDF
-:80F8000099FA29395F48F889A6AF8EFE223A4FC7FAB2AE5FEAFB8694AFCFFF5C5C8FC2F3F436F046645F52F6242F4FC3F29523DF72F2352C7FE3F36762CF6963EC17A4BB313F91F1838B67E3EF277527F7E7D36F66F64E4CEFC7F7A8BCCFECFD6A6AFFE4FC175D7FC1F5222D2F87F4961C2F94FD3E3CEF4CF441685F7DDC22748CF81E3496
-:80F88000EFCCF82D66EF73F56A72EF6EFFBBB2BF5CF849423F19BB83F84E8D8FE6F4EADC4F61F47A46AF8EF8FAE8EF83F5FCF8ECDDAC48F1777775F72327FF57F35F567FF6F67666FF76F77F777FFB73C3F36923FFA5F75F57FFCAF8373FFFB7F5BFBFFFDEFF6F6D7F5FFDFCFCCF42FB6CDE4F6EFE7B6BBFD3F37E7DEFD7F7F8EAEFEFF76B
-:80F900005ADB6FA3F3C7641F9DFF75677F71F3AD2FFF7DFB4F4FFB22FFEFFFBEAEEFC7F4BBBBBF9AFF192BBF9DFFCF8CFF6EFD4E48EFACF95C4EAFE7F5FAFAAF89F97C5CCFCFFFC8CE2FB40A2F1201006B12B0240143224121412109C0249688828422091018E14412E144024A12249414A012A012B02481C4110092228420414388C24846
-:80F9800028928B24C024F02E7F101421120111001C1101280085011C0140E81449286482B0240484C0184644A824844C0211811181108A56224C42028F24118418841194828C14021849F43D54C0431F4152381FC17248F1116CA3D4C1B64AF1816CAF14D981B24AD985B44A3924AF14B924F4429147822D914F82C4914FA2C4814FA2E477
-:80FA000011F2244A96E1A26C59ACEC49C2CA1F49C2C21F49D228F891248F24F89124AB841F49B24AD941F24A921B28AF2419B54A39A4AB9443F24292478229F9A448984FA2F46A8C40EB4146E38166341FC162341D2C2F34E1C8C2131D284EB61D28AF247924F84A9353F2429626C8916D482DB52E581CD986CC216FA26D112F824CD59220
-:80FA8000ED51D2A2ECC1C28B1B61A9B811F64A821F4192881B212B84CCF24A97288F349B25893924A939342D924782986F82949A4F82F5A7C3608882480000000044000000000021800188000040014008480000000044800200000040013769142E414049D41844044228821E41A6116124D0823221382991421384222A78864884221475
-:80FB000002424E84244081821141D8423C848866C442224289E824F8418410C2421A22080048A8DD7F2444134BC411494A785284F282582602428331884215F214484348D8282211088922922818E92232882B218722BA948829338228ACC81484837412C8128C49C1182C411848B82434814C082D2123E4844A018F234711619F559814A4
-:80FB800017CC842584B648A3827B41AE4193334846722831724D128D128B24172189A2289E224F8862C838AD262887284A7229642E85D218132244D96261C48E428C68429618F1144889F8A2482758846386BC8423D812D22294484681FA1BBEB02604102142A4143082000082215058A2002304400822800420C1C21288A0821A82488869
-:80FC0000488CA14127242820018C04400300200AF0E3BFC01213012800008002006044000000848100C02441520000A028000000882800002028042002000084AF9E05400411221B1242C058849028008C2111088B181028064E2481002C82229112D0480812008A222831384881000010088182428818608200CFE3022C1101282218424B
-:80FC8000008400001240080081688149040024521800008A010000128A040000004088888428018C0284CFA60881430511C021004E182270240822C32401E0810840082884984C9224223012308C8002844A2A88C1289028000030A84200220000007FAE02002181168483344442200880182431180018844C18448844B8181208800828CC
-:80FD0000008A04281028023280210812882048886188E0818808841FF101604200100225012411488041188254611800811041022400122504290524804298121813211242480284103248480020018488F0656300002413123828004418122C014810044400008800800442831148288801002C42024308200422404812242144840200C1
-:80FD8000F0356E00412185C23529628243042089C112124D42124E185562411281814493082568828C0452C9011E68202108222B2127A1130138842C2168821281A44E848418868422192848F827970028006081461221445412482018084400004308200412214022480A889042288100284F220880044022280418488112818200C79B8B
-:80FE00000080016041180000000020044614041281840042008C01002004008C0284181008420010288148088002005D6C80820212181098282812008140081800404408C0488544C818004018082800008C02C08800816084200884488884200883F4753F20220220C11480021800000042100430188481428410080000200684C0288111
-:80FE80002001004200C088200800280084DFAA0985B848A4545200834128024554444F82A22283021280444406A0118B119E848B8C9230181049088548B848A4444222843088845084E082A6222218844688184882085AF156BF00180000000000002004403848001004C028260428224800001200200100C048000081000000003B2410D0
-:80FF0000C84842488081010044414C228202001800251A981243812988080014111410C84842480081004014C424226880042004250229B1270584A04112000000401488420889044800104288118408410040018184A04118001228004044880242102801881002CFBE018004004420024004282004000010021880088400400150888054
-:80FF8000040000008444800284100800100218DF260E00000000000010081058480084008110080000000000008001000000810081002200009FCE0F818B445242220000504445B424222206480048242485A2111E1C92A282002811111185088B44424A0100001014B424E28226028008404242A2112FF9038484484880010000504C2800
+:80088000DDFDDDDD1F11F111114F44F444441F17F771714AA444CFC8F88C8CDFDDFDDDDD1F15F551515AA5554AA444DFDDFDDDDDDFDDFDDDDDDFDDFDDDDD0000000000000000000000000000000000001F19F99191DFDBFBBDBD00008001000000000000000000000000004001000000000000000000000000DF8D0748000000000000000E
+:8009000000000000000000000000000000000080020000000000F01B24000000000000000000000000000000000000000000000000000000000000FFE40F48008001000000000000000000000000004001000000000080020000000000F089A2000000000000000000000000000000000000000000000000000000000000FFE40F28000013
+:8009800014000048400128004840012800000028004800001082040000800400002148000010F2BA5E000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE80840180020000001002000010024001002100140000001480028E
+:800A00000040818802000088280000F04CBE0000481800000012000000000000002001000014000000000000008002000000003F84054818148002800414182810820416012810A21140012810A2414001002B11484001280048408188022148008828108204F05C65808401800200000010020000100240010021001400000014800200F6
+:800A800040818802000088280000F04CBE000000000000000000000000000000000000000000000000000000000000FFE40F0000280000000021000000000000100280010000400100004081080000000000002F6D020000000000000000004002001100800100000000002200000000000082280000F0293D000000000000000000000095
+:800B000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000110000000000000000000000000000000000F0726D0000000000000000000000000000000000000011000000110000008088020000AFED030000000000009B
+:800B80000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000230120010000008002000088000000000000F036AD00002002000000100200001002000000000000000000000000000000000000F0DB150000000040020000000000000000000000000000002002000014000000800842F03E
+:800C00003C89000012000040020020C41212000000000000000000000000100100000000000000F07CB2000018000000210000901200000000000000000000000040010040010000008880045F960900000000100200208401000000000000000000000000280000000000000000E03A0F8001000000000000000000000000000000000034
+:800C8000000000280000400100002008F0C63F000000000000000000000000000000000000000000000000000000000000FFE40F000000000000200800000000000000000000000000000020040000000000B0440A001800000000000000820042000000001200008002290100002200000000008800008FF30A0000000000000000000062
+:800D00004200000000120000800200000000000000000000009F3901001800000000008200200800000000000000000029010000220048000000200800E0980D000000002240020030110020080020040000100200002100000000000000000000E0DA0B00188001002C0800000000000000000000000048A2000080022004480000000033
+:800D80004200F09C7F0020010000880000001800000000420000400200800A000022000042000000004800F09B5200002001002C02240000110080080000000000002004240000002004000000000000F06BB7800380220100001122230280081282249082C0110080140200800800200180082824002800008004005022EFA80E800200CB
+:800E0000000080013A0812308200002180018001882011012002488880040000002848000000240070A40A0000001828000000800110A1280018480048808401A021004800880022000028000000000020F4653A80830200000010C1221A0812988218822221202104206524C21812802188220488884280024002220000004200002CF42B
+:800E8000FE550000281880810280010000214021088210018888000080020000120088200200800400000000F0A33220822102000000000000280000214200880038220022003440A21200002268800400220000004248FF110B000000281C02291882188288031880111222082722242C8128822428250C82200882460128240000008043
+:800F0000020024808404F04D86000028002800A8000028222082288204100212180048000022800220080000800648224200808204007FD60C800212000010828182810218003082188821118E528028010012000012122001000000800200220000009FFF0FA021282001000016021200201201008004114213042A8484A428284081420E
+:800F8000828A82220442800414000022002022041CD45D0F00000000800118800200002C020080210882110000001002000000280080020000002004AF420822112002001114001988C22182800114400121121800428098114820081B841B1211002286C28182002082022840022200002F520D0018800180021825820100180088884278
+:80100000001002A0810020030022303220238488060000004228008002006FFF0B00481C01001001400228802A8808800839188109982800001420018084018200210024E01412420200100221147FCD079011181382010024A21AA1883A21888201E031288A1462342C02211AA123484AAA113A2A82081BCA211BAB2B42B22830418262BF
+:801080000020848284022180021442F7E4000038002A12011E92242B1110A182128814C0A223A48830122D415848988044A1140011303129418121A4888A02001B462111A0268002224A04006FAA062AA2232A222101E0125211212117222120A12A3AA32882211E81805C118E829A58128AE41623A8448A842228C3232C031A83A24A242A
+:801100002934226800224823022302242823A2444A84F4E6DF0022A012000080082C08888022011180048A0419041828208821088214822B128218A08660246024601420042800C0220020E4A8012817111AF311218880F2212115B312B892F191119AD9112828AA8A171815F122A23F14A4CC1F14EC2CF842428215A1C61F1EACC41F1594
+:80118000AC6EAA8AE811F9C1411F19A22ABAAAC84AA4C43F1EEE2AFE42622B441F347443F141432B444E422124212382A44448F08DC580F251611AD11187012AF2212115F392122B993F31B912DB1128A8299A798141F222A23F1C9C421F14E42CFD42432BC41F11A1921F1C24FCC1D11F16AF2A86A1991F36FCE2D22AAB72EAADE64AF813
+:801200006161EEE22F2436421F34F443611F3494426E6229421292224E622B444829F4459980F231511AF31121002AF2212115F292122F21F111831A7B8181A81AAAF981811D832F22FA63612BC81F14EC28F98383297811A147171A8217116EE1A2821B111F14FC13612B82BAAAA8CAE62CF8E1E32BAA6A26E424D413F241432B446E42B2
+:801280002342522226B242B4428424F4F52D80F231713AF171311A092AF2212115F312922B193F39B112718181A82BBAA9881D832F22FAE3E18AF8C1C1CE823F3C1CF21111AAD31182F81191BE712A92811F11F9E1632F2BA73B7AA3DBEAEE28F863632BEA6A064E4237141F3494426E62294252222E222B662B442CA444860D0000002215
+:80130000402201922008000000002004422084282402888008260100000000000000004200D0AE0522122A0118004022480200208102248002001002182800980060221288A01200A08228000000280080024214EF14042AB41122B211A2141B212394212B1619F2629219B24239112B94322F142BF342B1322D912AC4912E421CEA2264A2
+:80138000112F22E519E222E519C2529AE222B4D1E222B491D222B191F262111B2923B481324219B26298212B84112B84222BA4222BA42229AA424AE822F4D42580B411C4411361141B212394212F1491212B9419F242B1112F1429FA428113B84238A129B8A384F1A152881B4A881D42821F2224C9439E212C244DB39186A4294631112F9C
+:8014000024A828273419E224082F340A2F34082F24082F242892822B42296822BF6C0D2088040000240000000000000000800800000000800400000000000000000021F05EA100008082522248002400003200822800000021112001246A0828008002002200004200000028A04240F1A17E009200000020040024000040A22122824A0214
+:80148000422081A1241901202428840180A428488820880400004280040014F0E43F00D200C02280044210224202180082266223228272602C00186A11512120842824054848A848888088042A040042808442A224002BAF00002002240000000022000000000090110012A02C8002002800800200000000000000F0EC580000A01200123E
+:80150000000000003081000000000028190818008008001800008A0240010000002820049FD608288002001800881200820022002100000018160200006A0138A012800228200820220400000000008FEC042880021A021200880000002814000000000022142001002880031A020082009041000000200248F0DBF8000000001200180082
+:8015800082008048020000001816028800A043800900002200A280020000000000D0710522002081082800002280018001002180010062409221200100001200820024282228140000002200F088A88001A02180010000A0820022822800212928C1130012240010012391218024080000000028002200001002F0D7FC000000824002009E
+:8016000020010000922872000000008001000020012008280000000000000000AF67031A028001002221002001208208822223031824001268001B1200121902001880280800292202142002000000F078ED000028181200000088800120830142821001884002240012210080090080020000000000800200BF310CA0210000802202000A
+:801680002430228880582200000023010029088800822225F1228100118828220028000020020000F0E21D8002148082C211180000181218111800004002423031824A081A08208482A1A40080080040410111004848200200F09EA900002004001828122C0121221022012522818101248260292C0100880040028288001012021002217A
+:8017000021002110120270E20F00122820218101820080022A01221200822D8224822602001081A92428E01C028002484081C86300480024002A0400004FC10D1100800400281882882812002280810100122001009211008800A03823884142022824404202404202400200224E148002002001002001800A0000001002182813240214A8
+:8017800000000025011C0200248082621248281100000000E03107A012001902001440011CC1221120410114234491428813082A193182004282484248A2000012111411114228482280242434420000BF9A0920880120020088200100000018120000001800000082880000140000004021020028004001573B00800488000022800828E2
+:80180000802202204222911282291181081941A181E01421AA2414800486810848002C8444C16211002C02190410022FDF0928BA2221A2282AA2113A2122182121422251211286021400A0811C9821122C3812868181A8844AA64CAE61489AA882863181401331221D216E42141512512260222B262D431042013FB9062282002AA4111419
+:801880003011B8E02889B112B8232208141AF1321258988A04272C2A9132B234121F1908BAA48A224AD832C823821A481112A228172427241C3222230410B2428684120214F0DE5D1081C1113041008022A291701182012AA3323824701262111E122728B012F821411CA19C39089A0480DA21B1A1322219024AA8811B4223C22110A144CE
+:801900001CF42221A04400420020F2443110A1121130812A110111221130112C081C0A1C083C8844A141142984820529044800122212271212141223044A088004000080020000F0DCA41415D1111151111F14F45161111F11F111111F13A99117181D9129F183911B821B998217183F1AFAD3D14AD411F1C1C3CE821326E126EE25F151B2
+:801980009115A144A0391E11172917321F3BFBB2B1CA54312F21DD22F423233F16F66163212F34F442423512E224F46242251202002E22CFCD06281F173611486AF45171111AA1311F11F39191988AFB81912B981B821B9B17181718BEB29AF983811F1DFDC1D3CAB8E1A8657E621F15F951111F11F151D1C29E911F1FE71DFED3F11F38EC
+:801A0000FAB2B1DAFD515329FC81C33F1EDE11F261632B222F14E62414024AE426F462422F24542221A0223FB904221B531601881B671E111AA1312AFA1191921ABB82F88381AE21A81D81B022B312F113114AC5121DC31F12FA51512E321E5217181B55145AA5EC6E311D321F22E63AF2B3311E122BC41F197941F323232F36F663613F9E
+:801A800012F643611D433553222B446E6229820421A022CF1A031D211B6316217421B1714781D111F311319A89F981931F31B112E11BA1931A59113F32B352051F11E124F483C13F12FA11217E623F19F512111F156518DABDC1FC61714E733F28E63BFBA3A14E422B911F187841F363633F32F263613F12F243411F34543325B242E42203
+:801B0000F462422F241412022AF2E348004001144001144021492149210982308142121001208401192884099880092A08001C0926814401800400480000002F5F0A26210120A24120212288012011228122812191120082108292111229410120022A082D11122C0800008002000022000040F1B17EA0421B212AB11122B611B262912115
+:801B80002B1619F242921B212F2419F14292222F342BF242B3222D913AC4912E421CF822421E212F2265192F2264192E429AE222B491E222B49152321B29421B2923B681324219B24298212B84112B84222B84222BA42229AA42882E4247B4809461481B2142133142112B14112B8419A2B4114A39212B94112B84222D913B424AA1124E99
+:801C0000811D82122A6C1C2662193C641D24D2349AC4419A42B191562219662419C282684EA3E03428E22428C2822A84B82294822CF48A29008248008001000000000000000000880000000000480000000000000000001002AF1B0A0000002001822081018800002882280000000018800100322822A0282002000000000000426012AF49
+:801C8000950960188082C1A2182822225A088214001260212412200129181211022C91A1800A820010120280280228008642822402142C880214F0BD6300C6012280022A81A28292204A2108128061221E82221212248211009083111A08882007230228800A8002222424422810C182244200BF7A0800001888290100421218000040023A
+:801D0000004082081002181A022800002210220820020020080000800220F239E740010000206122820088008081041A040000001502210080010025011400000000820000002800481C012800808204421200182088888102822C0A2028021122800928802A82080082239822804802482100200888208804005F1A082800800220C43228
+:801D800082000082181820A8580000002214160200802108241182133822800880042008000088280048CFFB051100004280010012888200224280120288224001248220028A22020040020040021002008880088004008FFF0F000000002583A11200821800281824108282810280222891211142212200804202000048000022888840E9
+:801E0000821802F0AE48A0140020040000602200200220089082C01288200100108141022820018001100100000000001002245D5900000000200488004800140020040000110020012200980000000000220000000000002B9680040042008094123A682280842112810224800824882021820819022E429022382081422201400142226C
+:801E80000000880024820024BFED0E1848000000250100200800800942800228881400181220018008000000000000200282000000CF9D0B402162140080220400004800202228110225020040020024001800202124021001008008002C0200007D33009041000000CA02282008222148250220880180918124001126621824288092A1B6
+:801F00001A1222938128A082190A11881120220282A800288F4203002004008001182110018005D02222083022E029022112241200005021502348141001002240012200002400F0DE1900001218122480022800101162225AA218003083D0210112008824E01102182121000014808848118108000088220021F079F50011281100281823
+:801F8000422B16200200180020A212821818222222860212221212282128002800800280028088082260224002009FD2071240010020022001400120018800100129010020021C421101120080210224288028C88240810888C0820021B08C040020410200008008004682248A8281681121141824001002108289012122601A004001009F
+:8020000011240000002A0800EBF700002820012021010040222182311200000033088011A11280222802228001000028A0280020022820024021F21B4E200148800100288002C02213240600001123289211902100502388863111001429042601001C0A0090228088888848011012F265C92051112214009032128AA51128002D42187A40
+:80208000E1212ABA82A1911D111F2119029022D0223112381F2132122531223022222429E2128468121C42312182118200A82824142440015FCF0A00B051032901226A27A1222908171815B17284249412260220885231A6420212221622A2129E822C61212429F812118E51181100AA88E8122A48E118A8A8008828824081F28ADF8001AA
+:802100001D21481A218102B062022200422C92222B521EA228A22B88143633223BB11F1261287081722391828A9A311A82D311C2212A3231282681B2A388E218023C9882312222AAA82A2B8A2BA2213022CF8F0D0000001002290829082908240012000010020020180200200813883181308110011110010000822400008F6F0912D01177
+:80218000F211611E822B11E023F352722BF79AEB2AFA82823D8119E822A3574AA49888F081811F18F821213551213593829AF9B1B317181E922B88AAA2AA8A98812EA33F3B38431B8C86F181233BA21B2226F121211592832F18A8228240F2A281AA0820F2C911A0114E4115F13171821E1225F212122B777EF22F2BFB22222F22D213F85E
+:8022000041A12B332F27F7C2922B982BB3213F19F981811D131573A1523327282B111F3371A1E332BA82EA2BFAA2A22BAA1BE62EA39EC3FEA11F1C38818EA32F18D21192811CE212F283813BA8828AAAA28EA223AA8A002B222DA5A01119D411D21152312B111E122F23B372A77E3EB22F229222173837182F23B372632529A1AA3ADB13BC
+:80228000F811111F3253221F223823241AF1212333F82283AE82AE2221E01276817212F3C2F16A9E8186D312AA22112E213CB283F882812A22A82270A231822120F269D9A0111D4115F171311F11E121B132A3223E722B7F3AABAA281738371A2B332B373E122B98BAAB911F19B911F921231F32F221823552221AF1B193172A2EA2BEB266
+:80230000BE222B232E222E611F2AF2F2A23B751BE61CE828B883B221EA18A82219FA83813B8AAAA2882AE2227A22B2A20220F22EF100601240022E120000400224122492200913091128212800213022B022012B82A082A092A0820020220800822880220800F03C62801121224121A112C012682E12000048382AC42290328009282410B1
+:802380002221021882888001250280048280820800880082200200F0868D80B411021B21421B212394212B141B282B941B282B9413F84293222F1429F34291222D912AC4912E421CF8224216E12265192EC296D122AC292CB491C2421B29341B294E111B292F14B181724291212F1498212F1418F14281222B84A22B842229A842882E420A
+:80240000FF2E07481B61B01126B411324219B242B181B242B181B242A3282F1421E21429F24291222D912B421CA9521CB8218CE82264111F222CC1C39E212CB491C2421B693CB49162141B2827341B284691212F1498212F349A212F1428B2422872422282B82294822E422FCA078282000000000080020000000000800800001400004838
+:802480000000000000280000000025012F240C182800423342012448420000002001004002009042001888120080213912186024280000000000200420B2490D228A8111814882A14280C23142400210018224A0242042C22280029032888058121214882712196C120024242248402198212C02828882194201BFFB0612CA03A0482C2297
+:8025000021022B24284222240011204942A2242011A2282128002B211282142521611460191CC5116024220042221488190200E024C82114226FAA032280114112418104E01401000000000020022140220480089800C092282988024002230200002C0288820000BFF10700000022200400000088482880020010010000218088028001CF
+:802580000024200210810800002C020000DFA80E48808202301218C082822118253281422022080080280821809622380022184022225212122322080021240023082008682022F241D68004282240A22112428288212C411221044A220222000011218012220120A821002828212C012928021041028008801A8202006F560D0000000015
+:802600000021008008888008002088080048282602200200230114200200242008240000200422223EE500002800000082200321888642221802292881188212018001008214002100004880042008000000212422F0F928800100800200001C2202200240012121002A0182320010010000482094120000000024280080042602F04685AC
+:8026800000000000000010928200001200000000000042100224001002008800000000002800003D6980012002000020D8214202A08282256228100212882042810118003082110021202401428848000020020022212200EFC70A8084048002000080211802001C0120082428802802004800400200250200000088400200800480025FE7
+:80270000870B20044280B21104008221822008820000004022038008882488248880081C0829088830422410120200000000F0E6FC0000001821182110012A219812880029011812002188282240820420021840022A110120042A8404008004290400003F4C0E20812405002200212C02204202000022122902C0822400808202800218A6
+:802780002800808202820000220020221202F0D8B60028000000122811002800220010221102402204A082100218284E822800A82848002280820400302200200222FFBB021822208312322128200A2100004221122188A092242C28B222012382020040021128241002001002100200000000227F9C01A04158206112806421200112308F
+:80280000120020025A0221000080040028281302288002288082A868102204212228282002C022F071DA0000001223850116012C0929031218128011A228230448002290122280040000001AA41A4248A0A44820044200280010023FC9041282003821800400000010412214022022080023281212020024220021002180020000000000D6
+:80288000424021E4BF0F228004002280022112802202200112101212820188000098144A182204C800802604002290614880042A44012221F0221D00B2A0352821722A26E2221131122124A0184A512246129282882E12282CD422B222C4222AC2222128E022C6226811A82722A228F2222A02A823842424242214A246146240011FC20187
+:8029000032CA24812412D113A2111063282C29A918234B22AA11212C6123184890822AC122882DC2126A8881AC81882B1A29488248F2328129A6842C84F422422A62242914022A840200296212F0E61A808103E021E1238365241A81DA12218213820314A01312583AA2A127288028312230A224882B223023422A22C12138428026ACA671
+:80298000C22C0411A0246022282A0222242AF6BC740000002603228028C18280088822204A8284A248B0828482A42148924892201922099220C81282002400400200001448800497DCA0225A032A062E113160212D232B998AB892C9822B999AF1F1732F2BBAD24DA2FF7AA5994AB4C2E42CF532126E422F2DED2DBD92AD495AED21FBF18C
+:802A0000F1121F11E921F9928229F1E2E2AAA846EABEC25E222D2223F44343A0442E222F2616A2662AA6666A9622DFC40E3AA2711AA1231AD21293633A62213F38BA82B812B112E321B992A92A1F3DF5B2B22BFF2B332B992B137AE5256528AEB22F25F562C227222F22B292FDB1616AEE36FEF1F3BAF841C12CF892C22BDC2D222AA2EE1C
+:802A80004AB4427622F222222B663F34A4646AE622F26262216E612E622B666AA622AFEB012AA273A0231E323E233B23183AE3385A222C91329AA1911AF951D32B337AD722B1A2BB32A3FD2CF982822EA22F26F432322D2221D24E916A66283F17B6E2FF2161863212AAF97272624AA4AC2F24D622D222B242F64343A0444AA4464AA444A5
+:802B00006A3242A0663F14082AA233A0331AF313313F11A3333E323F31B392B982D922F192122B91881F37FF12122B552B322BDC32BAE924ED2CEC235A222F2FF562422F2979D2F262B16AF6F1521F3FAE741D61BE322F2DF862522F23B3D2AFEC4AF642622B2429F242623F34B462A4664E422F26B642A6666A32422AA266BDB900008081
+:802B800001184002240000402201A024200442214229219412422200A01220022A8124022248800448002800800242D0CF07AAA121182002211A220221009012122812292311A24218002220022E12282A012E128001183042000000280020420228202402F0EC4980B411021B2166B211726292212B141B282F26B981B24239812F242989
+:802C0000FA4291222F3429D212A9421CEB22C4A12F22E411E222E419E2226C192CAC292DC21B292DC21B292D821B294E811B292F14B881B24298212B8419B24218B14228B24228B2422892822A84E822F4994D80B4118634114212259161421B282B8413B8423A812B8413AA84AAF44211AAC4812B4A1C89C5812C6D112EC2D6E122681CAB
+:802C80001CE81CC282DAC2838AC6C39AE234A8281CB881F642821B284692212F248AC2812A94822A94822A94822B42882E4237D2008004000000002008000000008001880000000000480000000000280000000025017F5D09820018800116420112120088A08480250800001002004262000000292808808408000024240000280070C247
+:802D000008202A014082016012A04288122124221D22199831302190212128800224801102232212222A52212218200225222208002200288661141C64268FDC01200418C012002113022222248224A22C82854982021A12E22802A8002314110221304210022220240821222200242800C082144681F26F8D0028180080214101181A8443
+:802D800028012014C18113021110010000002A058022022AA8283C08182002248008240000221C82042CF4F89920028042021C813222122001200428121C32312100002400A092901200402209008008200800400100002800F059FA00262101A0522839016602483011C011C0A2004820023121301200322830724818F0128125E21108E9
+:802E00001E21888A02400200004268284800482F1D0C2828124082671139818217A241601142192182691218210050210018A02926A221301242182123113292601B88A20000400100228006006FD40D4001280028282100000000222113820428244002210012002A0420C9814001002008100200208484020042DFAE4A011480020024B8
+:802E800013018021228421020028191982C142183011248800803642C042200142000020840280048008882100F08613200142200500108201220088008E110021208801802202282008221200219012400242400129022200001002428EC5000014000048000040010000800400001280810140028001182008800C000000480028000029
+:802F0000AFEF064001281A040027212001200422001B18281C01184A084081818A81032446228294121229819492002304200220848284082E820080E4D906188014010060140012001C2108008088042480A881260200A02C0018484800008088241441020000000040F2D19B141130211860221890113021181200140027112601C8C074
+:802F800082281382B221844221210420052008341E212230832115021431140021A0240000DF6B0D120028001418408101288228001308201442E11481288108881A8888810811208C048810410114C02200000021002280F489126011141400400100271822805122101101183192882214C0111414100100884812909100188219288828
+:803000000224482088240400422228CF650DA02520041601199242284200281824122A0120011288C082882412484082438252212882282E8286022880D2239841422420823822420000F0DF2D0013011418338803286602008012110226110314601421141C014601484A6224D02182E22184811701131281122108111114202A02800212
+:8030800040D14B09228082218201128081821102202101182001122220282229220100180000000028000000000080222412022F1704001A840210124122288868212880080024C280148282218482288868288228428880021226020024402244023042200A2908001F8944218224012A1102C052200124181012414202111C04601800C6
+:803100008A810519042C82C212112C8A82841221018002142004222024022842005F2A01808204800228C011A0828032521230222001122F34082C81820880042A68114A918222211A94811818488222C82228822880880242C0421022F22988F01121F011113228371311321C353135A11229011AC311211F12B212C111984AE814B5425E
+:80318000B82108211F1428088A85C1623AF2921213E428A22A19C4811AB212417181C2211B223CD23214022224422A2A82246212428DD320C251B04122031C92214E22292888C822232816D2310117322135F181111B881D4186B1B2C941BAB2128558112EC2AA081F166C3A2B921A21A22915D211F281822E811F226C184288171421A86F
+:803200008A8606482B824A0424CB1814181B272A82C1122CB312C113124E333AAF29121E1225F21182128E12F011225AB4126421AE3229D211B23183F161A11B5D4AA82C2B112D522829A24529E81DFB21122F1229A62228822D823332412C5411822B8627224A84E22482022AF2CAFD140020023440214101228088C4828008880080027F
+:803280002880028001214229012100C0122004460224400200240000004E2814387AA2111F11A1223B333B323E217AF733332BCCCE422B8127282B1929B191B9A3B2A2D222F1939119AD991F29FA82832F18A111988AFD91D11F18E92EEB27E72FEE28EC33E72EAA2A8E819E923D222F14B6A1EA1AFE21E2AEA11F14A6CC2C54122EA22B5E
+:80330000EE4AA2AA2E222BEA4A0424BFC2041B221F16B231F131712AF33133E012E221F1B3B23BCE6EF22F297B8232822B993F19B9B27382F212123BD92BD9DAED38FBA2832B225AB7F1AFF51F1DFD81511F3CA911BEB3CAEC2DADDCAAABD9BEB23F21B251B681BA81FCA1C21BEE1D212BEE2B4429E228B8C2BE42B4A2EA22F2E2C22B44D9
+:8033800040B24748A1321F12F611311F11A3313B333B321F13F231323F3ABA82EA28F312B22D822B452F29A9112EA33F33F392923B512F1DFD91D1EEF32F38B821F871511F17F521511F19BD91E93FEF2FEF2FFFF1D31F2FEF2BAFAB1BA81F31F1A3B23B881BEE1BAA3F2EBAA3B841E61CFE4143312E222F26E624A4AA6E222BCC2B66E02C
+:8034000022F24677141F13F321611B131F17A3323F33F333311F12F221323F3BFAA3812EB22F29D922B842F412122B991F33FB33332F29F913511F1DFD91D1EEE3273A1F12F25171FE711F14F3D1D11BD9FED32B993F2FFFD3D13F3DBDB2BDB27AD1F191133F2BBB93BA41BE81F8C3823BCC1D21CEE23F34742341F242422F24B4A2EA26E4
+:80348000B2E2BC42042E22AF1A0A2A01001800402109400230112412241242822008214218421880088842888008002A0124000048002448004A0228B04C0F14111428A021271212628A5212281880012521521240216914A64231213021821928C582C012823C0198121C8852128214C08128250314800842000014DF470D1CB41122B2F3
+:803500001162241B2127341B212F1491212F16B981B24239812F24A94A2F1429FA4291A22DB12AC4912E421CEA22E411F222429E212F2264192CA5292D421B292D521B2925B29162241B292F24B181724292212F2498212F2418B14228F24282222B842229A8424AE822F4767EC0411986A14146A12127145012282D9113A8B413B842A987
+:803580004A4E91A22F1429DA12B922C4912E521CC8D21E812C64192E4286E11264192213A9421369221B4946B211E224B881662619E42498614E2219E224084EA2E02422022B4229A8423F2E090048000000000000000000000080080000140000481800000000800200000000F0D8284011014001143682410228140028002128802164D5
+:80360000241021110320AC1421B08181021C01483A08400134282C44815422008A020022F0881B14200218481200000020810112230223C181481211150211122D912329011848A04111221C8102212121140011100220284482021422BF6A4D11A124004218111821100222802162212221235221521AE4311461181971123192181ABC3B
+:80368000119412C091484621C211622A0925021430221B4235622400A0C224240028AD5300112041018082018042210100001288000021001429080048A012C0110010021440010000218200288002F7F500000000004826020088400200200800000011B0222809200218C091702201290821501240022008202428044F7C0C111432140B
+:8037000032182E112312B22128180140012248221B42230128142D6220042988A18618301212190140012D112C08109221008211208284922222808278C30C1120438183C11228C0A1A2140000282022048840A22421006011CA222821012601001123D112088225120111101182A28426820200828F950B4001009021242004210019088F
+:803780009042D02182012211004824824022632820210112111A4821121202281022080000208628064F5F0E188001241221200130221A04282200255122122002AE12200425A241200490514002240040821402130429829442284822006602F0FC4500480000008002002A0400280022211888182A44018230211C02242818128A0480ED
+:803800006123400120322200228250223022212848BF64081400000028000000C012901200001100502262000048280000120080228808000000000000E01A0A1C011840821122020021424860230031211A021C818832622581220811288092421800002021724281083C42024823224A420223822602FF1C0982000000808102281800D9
+:80388000402203100228808828D4220429858224041B2120918212211226022C08800400488084020080F4383B40011212800520041448001848138224041811C8488012118102228084140100141602200A2280CA228E42282B2822002728248A0426F21ECB00141420110162601A29322248CA0210A22123813262C8141A0224C84E2244
+:80390000001C2424422286062410131113A1484A9842462204424821208C0400C29F890DAA2101282A2132231227226023240080021419021962122290215A08112822000012241A0222113819084021120142002006002004B7B8202402004248200120A4121422A0120000008001126011880012001021C21220880200828282148028CE
+:803980006428800810024FA84F8104004021C121800228460280D2120415224231C24228422826612E1110A124421811233411211200C021E824C82414141C04A22868008042E17508001128000040030010314224720000214800880021800848200200800A0010014886821882142208824A0848BF530F002A01245022482924C4119889
+:803A00003041C01188806414482A414181C1414218E012A12C181222481D12821B8119E22221011093C290422400420021422A240282CFA904288A03122C2641032084842141C252182411236124808101421829824112018822382302222B8221223428601228C0210060228088228202A622F21F782019A14200281A26E121820124900D
+:803A800022118001222001290A2E111CC8922081812143011602800500928224C02220881201904240029042F0AE34141AA32A1B232063126A86A724924AA2211AF242411B112B212B3425E11231623A21E21645A146CE411B112662131921A9B24AA51316029683FB113160281F18092622484291411F2C8C4282FA62C2248229081CBCCF
+:803B0000827C930C1CB48141A1322CA25416335126F2224225F142C22F24348127326A64231B641B25482F24F64161A02419F221326E613F15D423E113E214A6451246A2562B472A718222F212313B8229B221B241F662413BCE3F26F4C282141BC4CA7E62A228EAE4268CB2A2AC244E22CF220562168121A1143F21921327222B511F143E
+:803B8000F231122A8101423CD111E82391423C52119AB981AA52141A18A23828233821822A82D613D221922313532217221E31228E812F18C8A2288A8A125232238204290A2A242422E2FE0200004800001C88C482C0811A8488040012000000100200001880010000002440022482200840220882F0CC9C14AAF6212111782AFA61B317FE
+:803C0000141F32A235CE222F28F162322F28FC93111B286E32AAFB611317362B334AF421A11F14A1471F12F421731F36F762A327313F1BF8D1D19A81A4652F247442F28282921F3161213F38F993311F3252333F36FC43211F16E624F842433D222F24BE42F462422B866E4282A8482CF68C95141AF551712A82A7B31F3AF3715137322B1E
+:803C800026172C2F2AF1A2822F2EBE9331832F22F3B3B13D133F26F212323F347623F161414AA5628E626E623F18F292B33F13F2D1711F1AA3115E733F3515F2E3619E221F33E721F283B33F197921F323232F268CFAC1412F267A8242F242622B222B4A2B826E422AB262A6462CFA81D6B021F631611B112AA3462F2431421F3287E72140
+:803D0000FB52522F2FFA12723F15B951A5AE1F167761F131513AF751513984F16151226EE37E631F337313F3A3811F1FED1DA3665AF473712B333F182EAB1213F3B1B11F19FB21233F34F862C22B286AE62CFA43833F18ACE42B8C27262B882F26BCC29CA28AEC28F6EE8CB0B1F711611F11A1367AF741531B571F33A5772F25F972522B52
+:803D8000472F2DFF53913F35F5E2F23F37F553533F37F752723F15F723211F12A6442AE622FE71631F31F393B327131F1FE518A3371F27F673732B333F19E729F2613313F2B2B33F197921F323222F26BC82FAC141CEA22F2CB882B8C2FEE2A22F2EB282FAE2C22BEEEAAECE8EA28BB920022A01220040A241241280041210418204132814
+:803E00000442808201188021240222A09220021C0988820014480024480000002FE30500144002244818121450221301D02213C112122122184041421123312282A02124120025321121000011252208501200222C080060385F7E09581B21B091A2141B212B1619B262B181F262931B282B9413F94291A22F1429F242B1322DB12AC49138
+:803E80002E421CEA2264112E429E212F226C192CA4292CB491C2521B292CB19122B49132621B28272619F2628219F24282112B84222BA4222F242892822AA4842E421F410F581B61481B21181B612F1681F262118AF222131B684AA32825B1A194122AF442B113B2423B222D912E521CEA22ED1528E211F223C2D2349E212CA42D348AC612
+:803F0000431B2946B2917262A2282693612E8219E624BA8142A24A2B24222D828AA42423B842E222F4155E00824800000000148002000000000080080000140000480040080000800200000080022F520F80021480128586818111421188110A2123921111428052831190322901922D42A44211184094112941212402C0229200002228F7
+:803F80002031224A1224FA8DADD01261491681612182B01A1892C87038014249242792218A41A234A2C5010030411432114132203741281A0811708282C1228B82A04270C1C8912C064668242084E11488F4A1592413B1E42181218118F5528A9098200246C8266E187022A3821D1224C8441E22852148A21200135843A322641356218411
+:80400000C11240B182A421228B82222B8320B49102232222642126222588FA18A80040114182022818482C711148014A012880014E3122850110011D4216A1121248122142809284111C0124400280041788A042C0482420246244481FAD08480000402241C248250114001228112001A0244828002011012A0148005012002042081225A4
+:804080001201110020010000481FD406002713858251224194422A812225DC822148098041118801601C28B012442115282482239425200136D228C6191662228A043214863844482880C672A0144A82D8330C48F022118450221043E2821182A484A1881C214201148112008E41400219410162007021443211002994118C41221142410F
+:80410000318149242402484A12822124F4A3B300003012103418424213221121018400121800624822222005588118223A240400A0218722830229A248B022018100208182014222825F650A1D2222382065211140312149D2810289A5242F4221A4212228412148804631338880266314842D182A24344444214C66222C02222741511189
+:80418000844842251882012448288CB448D23905804468822184408112489812442625082225229112812334184A0121482978120861411190116084402AC11448301188C301A0282022042828304222F0CDC100142112431201182031112001848440480122100141400800B480240441002200123C0242A0124221A0148C28242101C096
+:8042000014F0F16B4051128B213828161B011C12B9185292184E148E4826847212AA21293128428C014125915B24838152C14914B8429151414144244E244C923239826144182E1146280C322328A1121E22A02443B148F2556620821242B846013011A021141A021548628142221422446014484A022821C0421A122244888204248C8296
+:8042800021210427329285012460248C3448480042B048029F72440112188148842814008C24011692184088040018260128484818224A4204208421445112111001423228181C011502002A84A3421A028249F2691B200110418134188904C6092C048699412E122882188120048481803248001C42858E121145044341A8844EA4168C74
+:80430000044C14324938488222100420324848DFE90718118051189A12021C0240981400141048082B1226D12841118882611100304448112664211820284442C1282244118C1222A1122250262061221810F8F9B80028810020A42489141251438140314A1605130200A01214408148018042048888A8124E222682426234241502214C98
+:804380000110A481002D8288A012F0E9BF3084A021608214123400492624848421628442C041212100101102290114000022434192141CC1424400929886822C48612128C24968848008C6F1F1F11012042021028190486051002A2401100280133248108803240000492211010042848C021424260811810048812260418001EDF9201228
+:80440000414129D482A4422848004C08A7112188281C018A2224B482041B4260842B24229044708401148038A300824A6841421984E4110490428AA4816C8101C8428C4CF2BFE58024C121122812A130216082844588241221A12189041902931101589111C04400239244284828C06128D480024A6212A881948A2112FCA2182043840261
+:804480004CA2AD7021288284622140038427227022662128818C5423942E118324459142284A9121888413942242681421421E28314BC270112A1251211D121A08CC04295A214C052034842038228CF8D922141E451F48D11111A85684129344EB88D42484D4A861252B421F12F163119C91124AE81504581D1117122E225E421519A1425A
+:80450000112CD244BA64A4815B48182F1832548B4487648A528466F164811F11FAC2D217248D82114A6D288F41BA12F382A23EB4A28F1AB564FC88DB242A42E183C238289B342B522E488B62F021281FB13B543B588F91714852847A74117928F822221F16F511A180764151118F2CE42112D454E4522448F424112CF387A72CD8716392FB
+:804580003DE1375637272C94512F4625B314F811112F15DC44D242DA22A5824B414388A1A185D24E04183A02171197B12F23F4482B1C3243AF14324AA3544285B941F212E88F2132898B263C84A12187A48F827648C8588F82A31366B142A22443A44639B24162173253A3C21F21638AC9DC58B713F3922285D299D29A64882E12B28B1787
+:80460000478E47446E1848296E848E2C3D82200460128008246032E012888428C1A4482C8AC4A412880010180221280061800800210084450224860882200848448A44020083F4678614BE315F5363111D51173E3F35711A5112357381D199F883833F38C9822BE85FF8F89E952B922F28F986867F58EC11B5D8FF494946E936B452744154
+:80468000E135F5214157144F26F6A48246F4E1C51F7CF8D4B24F49F134752CF286A63F28F23A322F24F633723F35F57B13BF11F14A4A3F24F572A68F83F9382E2723EFA2F276546AE483D3EC74C54BF336355FD67638F929799FB57D8BF35A493F16D41BF6A1619FF4FA6323BF3187F8C8AAB7B4A7922F86F8B393EFE2F626462F15F5D977
+:80470000F89F9541E112EA14F459B95E531F1254155F72E268F82424DFDFED5DF995F85F59F934759D286F58FA81A67F65F153633F2DF5733737368F9AF2CA5B3F247752F6F8D267A56F2F754EFEF6D62B888F8BFF9C7E6784342B775F537739F92939B43F91F17863BF12F24B613F3EF243E7AF27F643311F2CF442C23F34F14B53BF1E16
+:80478000F64AC3AF86F231513F1CFD58589F967541F968EBBB6717343F35F5222457546E638E826F48F8754D5F57F697D76F48E87152BA6FECFE8FABFF33F342723F37FFDBDFBF3FF85BE3AF24FCD3936F67F27C488FCFFA72C2EFAEFBE6C42B448F8AFA4CDE4F3F4CF3F674DF5264931F96F3595BBF14F47A2BBF96F24B632F2EF24AEAD6
+:80480000AF2BFA5B519F3CF4629A6F7DF97E77BF1FF372F3AF8EAE533F1DFD59588F9663948FB6F67B798FBDE735E5427245F564678E866F4AFAF5DD5F5EFEBFB67F7BFB5227BFB3F1A6E7BFD8FA1D163F35B7D3FCFBFABF3FF9DBFB2FBDFDF3D36F6DB9FCFDD69C6F4FFD4C9C4F47BD12F978F8CFECBD730E410084264128C24800C0481E
+:8048800014404208118113011183044A1211888112250442490898D012011C41D814A841141220011A442341648164924492008FA107239221100148211146518110D128011CA1421816480221124A42082A2404B02444914400B02444044C4282065022482410082058480000484294DE17C0421F41D228F111248F14F11124AB141D24B4
+:80490000AB141D24AF149921AF143915AB9443F24AB143F2429147832D914F82C4914FA2C4814FA264114FA264192E4A9E254D4A9E242E4A1F49C2C21F4952281F49B248F89124E7261F48F26E121D24AB9619B24A19B54A3924ABB443F242B6478229FB24488B944FA2D4580EBCC1648D53448F14C124AF14D141B2486148AF5429D81A4D
+:80498000BB85B44A289ABA4B481CE988D412F8A6481CF9245A89F824C21E814FA224E8A2E459F2244996E4A27411DCB4BC11D628F81124CB841B29672617C8CF2661486E1417C8AF34B385B24811D42A2BD8685384B86D48ABB44F88D5520D8482480082200100008100000000210000000040016084800400000000800200000000F06BC0
+:804A0000B5902213638115841141D64866225028110014208384C22419912484304D001C22012F8104924210466241112180088311825222189C81A128482B82C9C9328184B246F275B1207182225282A01C89089564A26082185C119888428D22122422521228222211D043A414114324C222471212222241124D51A01468494438384A32
+:804A8000C844C820829442444A815A1443B2E34D22F3C2138B21A584C1418938225C421A7C28217314118188D628226162244A21215381A2112652414217851D44AA61268712446692244523C111884A91686149322A2B4816848AAA24222F88F414221E4289BA94B214724E0F800211A08141CC54282824001048888184021C332481E047
+:804B000044021021C512000044290118004C048081142881D181A41440A2484C0181002CF47B231002251251181118200481101A111A01113412208132212800134285211104221B2141111C41C8821222602400001D481484449022222800249F3B0E1C82E342012952828289613289912282205941367A219C2222872881A21100342221
+:804B8000188CC225812F222184058E2324283B8129217212A816884E812B82271129084823882246B44221A1484902CF520339822201118031181352A28482841958C122430214218003222810221148C51825067219D16142A21282243602002581D22201842484412A042B43122042D2510C60214722159228A581084818221082119245
+:804C000019353823228F211888C82111108132211D243820230422821414B72192C038788A243C8211821CC4418222244302228A1404AF560F1C248182A221354852857088A221E71112230329828142C824216911A412C288524283724802214D421008560434188460821AD22211C428844E389E48606C466242211261899118CF45075D
+:804C8000D014241113420212154441382481848B2100A180042932288909CB828502008343039028414260414E2218122113441424214B04842082CC82896228442CB334014C111228014484D02A02004014911442642A8191288344018414264114221141481838112A21824208448CA44120A44111006024402881812804F06D4540D139
+:804D000014C13A1722188504455A2D868283124864214158CD22838195288745853488835849BC1414E28471315882E1A1122A912470146827C381E484E313248474183118CC814D9AC48B242F28662820941C2CF2A138F0845200122612512A13215281857211C812165818322480322421221C222224A221488942022004191224211271
+:804D800011028D1240624129818288148844024C2191B84308849734802211082818442F148222844601141014C42820223118439AA2211946922129C14214122CC24123C24149022D26844D221683022A48C122196228426512C41241282781228843F45D510024162242E2842202118B1A812C44A8182414B44A91684D825140117484C5
+:804E0000819923C0282052228484441211002880C28220A4281C48140388814B82184928841184F8C4771423182203188504810018121818A012436944100841108844018022822204411244400488408821113514181810A4A418902440C8444289F23712402802974189048344765892484481648041014081B1448254221CC412008461
+:804E8000141E8812114418111012B14111120154888314423441618E12200400488CE12201DFFC41012800A12041130140A142144880048844881E41114C04121480D1421204859428122302221621424204682064289216022CC12C252A882102848CF164FEC01E508200608212204182046818482CC218896482818C2A8C0290A8867977
+:804F0000421841810221219C4108411991428722485116041148202822A848200800E2DFF80122002D113C248C9442004888251858828881A228272C002584C8944A8A0811811622015094901400009611012D82190290841100801112848818E4960A1A7498010024121A6281241682522146084E22A2240050140021800410068C8681CA
+:804F800003499822472128182B24484E34351828912280C1241AA416A302123AA82426013F1407254CA442872213280185C442004C818122329414C0131E4193032B14124611B2182827344121881CA284682D6811E84219341190883E821B12824C011CE61144044CC462535242867812086F7449C14282A3D212312369947887466A24BF
+:805000007C72DE1161164E588B344F4DA8248F41D282F15448557D41BDC57F24A4442B493668A815BA15F421234E618FE2E262E13431114CC2922B64237111E169E111782BF1285E16A281255444CAB154F434D4EB814F62F112811AE2C4FF18198BC1DD11242E24AE3616381D8E418B9127811E519721AB51184E82EFA1719831121F1287
+:80508000F2268B2AF549412F42BA12B324042D635F78B841334919B638716A4C2411C4A93E242EB717111F42A2111563229CF2A7185E16271C1714172A16F2138259CC26A1EC82E262722434B8AE814FC4D2E4066B1137812CE3A272586A8647267D2A2D192688B41A0631245897492F84E822FA89128BC28B91748B8D212E812D21AF122A
+:80510000F142618E232B112F823912AB45F16B44E3127425E78EB346366B4E668ABA15FAA2B41CF341F18E512F71B2A2E9A4A24E2B854B18AF840D6C662A1FE80F424008602284002C48888884884486442211088524010090283088208821088241826182184880041A049A44240182A04914828112812FEB45F134267FF363812F33D763
+:805180002882F3541C15F4682AAFABB3B67331F2AA841F19F18B1B1B89DB8B422465F6475549E21AFA25A14F4CEC2AE627F731E93F99FB727F6F57FE3888CFCEFEA81ABF37FD73B51FFDF8B3352F48BCC2FA61619F9CFEE8689F88DF4FD723FB33B33F11F555D15F14A7368F8EF518785AE544C6283AA7B14F23F2989A1427627F7666A1C1
+:805200009F3397698CF74C3C3F61F27B228FAAE36FF3F382AF8BFA9153BFB9F1B5D1DF3BF9AAA2AD2A6FAEF4DFDD6F8CEE5AFAA7A75F58EC2BF7787B1F1BF6B1F3EF6DFF57C59FA3F8E6EEB79A5FF7FD73A11F79FEB3312E462B753F38D89BF2DCDC9F88798FDC62DB33F133716F25FDD6544D24E7C5EF6DF376745F4DF656782F8BE78DF0
+:80528000FF8E3E2F444AF375675F737738FA2223AF16F66A326D5CDD458D6A2FA1FF7276FED2AB745E98BF95FDD397FFBDEDA6F37373EFF5F14655FFD8ABBB5F5AFBA5A52CFA72722FA3F6333A2FDAFA342587BA8FAFF57CCE4FF7E76FF792463F735B622F14F27372EFE9FEAFE5AF89FD69721F6CFF23B31F1DFF46D27B914F42FBE8D862
+:80530000EFE5BF92B844FFE4F8AF41FF18B4CF22FB4A3C341F74F42767A7A1AF37F37A73AFA6F34E7EFF75F44B6B8FA5FF7A7AAFA3F1DAF85EDABF95FDF757EF2FFDFAF2BFB777C6FFDCDD5FD9FBB1B75F7AFEA7A72F23F27B7BAFB3F6B3BBEFE1F115158FBAF1FA7ABFA7FD75575F2F7797F737B147642BFC3F39F95A7BFF7CFCBFBDFFE9
+:80538000FFF6D2F33F39B9D1FF53D33F59B986FBDED8EFADBFB6BAD6FED6F88FC2EFE1FB8CAAEFCE0314004001418C64121A64221E48141230812813883291448032814C028001714269111802185012D012811404471240012482141244844412004604EF3E0E27284425C228218C064CB22821012850811812852412A842A1484625A8DE
+:805400008422832432582A0480924442408441642410688960C82911B1423114422004184885A44A89018F3C042CF51124CD121FC1326C1F41324A1D2CAB141F48B24AF98128AB9453B84A3924AF543934AF547924D81AF934488D954FA2C4814FA27418F1244A8F19F221CA96C5CA9E24ACFC91244DC21F49D22CF89124EB861FC9B26A3D
+:80548000F98124AB141F41B26AB911B24AB915F44A9443B24A3B342BB44782A9F9344889F9244ADF4A094D181F41D636D5C1B26E7111A4141D2C8B141D244E141D2CA99345182E488D952E488F543924AD912B4A8D954F82C5815F823C185D4A8B211FA27418C4435CE282E4C1F2244B1B61C7221B21E3E6C17262F3912C89F11124AF427E
+:80550000F89124A9B215F24A8643FA483243EB2472A498386B43A9F8A45ADFF20F00481E1200000000000000000000188008000014000000200800901800280000000025015FBB0212142123410A2D3816284211480112A4444588B282024228A028442190620041814981012D6290211119F221140000E01241984413B414822132122041
+:8055800009422AF4E3F210A1283628180270216495181C21E28401B028C1611644F11224004D584419248442848382336222C14444228921018149654329F1284425198804849062471119741814B24C6318815F990E111F24A2212D1250228362421D6819911C222A01242A511C441CD2424382C25C1EA44631C2604432224B21B364427F
+:80560000165128482B24818092384426267168561C838224B441C2241249C31160298B341483F5227780018188818071118801141183241158844A2293822004004480322200202251844443022E11134151414A2101001311181428B142123142478121414A28F2ECCD108202901212801402B0119498164841C814415410CA48422004E7
+:8056800000890212650200241024612280410800864822F14814C01222187048348442223F5E477131542154D01852281D1C16081B4189322200414B81142E588CA2241601228461812D4C1144CB2481D048E1423184430218301436CA4C23631329E928A452488C8498D22B248D1248ABA52A081E2870960D262452528042781285116223
+:805700001580248141151CE4C4529442848904A44C048C0426B848C21224124361484C12820136D48213B82881830829048C0523A8213668244A6888882A81F2E6961439110170132811C848008D22139388812099111828263211A0240085124411144418442C020041124062651031128AB4188A14B2CCA1412D4224188B12434694480D
+:80578000F09F69108401851274281104482941D1246111C3428421220218B22C6112C71321825662418CA114611281C512081860834220275283244C68848169132282C122411A0224B044F141C2A012488992224240480284845508228140981800602481124C8418A442412052124C2613084B841200A4814130684CA412233341582135
+:80580000828904648648C214188F7E0E48400100182962C2481240882441221484332C81C44142008400C088841880E221024120C11410AA25000000A490121210C44884842F8E072A811138284226911830662F84518140C844C1246289A1124483D24851849902D0A4E145C2145827C884844302324B1843A12148A42C15E8138482E42E
+:805880008453822CC1128123D822024C42C448C9D148F4F8DB90446032104658242881807111D812418821113824608398481CD22464442004818092125E24AC8142024088614183C224A18C9482C01259242482E181C41412A908009E15244096154932498F440270482126028442A02142C03842A90118412C0240828153828420062690
+:80590000044146CA1C2921117A28246162818D82C954848B242288418849212414F4268C200124811210B14201B041414814382100220020522832218AC24200401204C03680138102441116848412C124130111301C212A08228A212AF43976242031191820054A8101842015288211C84423B4280146088141901A205218830144322038
+:80598000121491121820012A61812A810884444422842B214C428AA214284FD545D1A11401111414997121421111E15214413159C0128901003021901119342142801491455A424AD812048C120427228D41294212744A6341250223DD2221C424422FA128481C42D88A47217824312424811290285880128882048C2264428143A21283B1
+:805A0000018F22840442244168004144124C21410811226604130400904418224B94588E44B0440888F0BEA1F05428502841434329022819042E14B01192484222A014488914114204882006202381420180C8148C722204904869A148A12449844211082544482882312418FF530B004008200424A44D4AD02241420227812012480218B7
+:805A80001126011418480048149044100820E444111814084284119290C4800842200888AFE80B17628428181014082002469148189881282512842122220244896181820028121816248661422241228022022218328E142C28880118A3D14212B848D224A1A4CFEF0C84124828274480434818084C41820248C0580042131403581386DE
+:805B0000321C411113446814482146082C85410125A484144324C8C422388C3482C04880044121F0374B1437668E256F41E1D1734D79647D39E21134411F92F63B2146D1815418BF82A8161E2A2CD648E6A4E1852512D8AAD251B221726179328AB121D1887312A8211B2529B214D344D294D148D6427326E6127682DC1AF31A361F11F2BE
+:805B800012BA37B1A5F68483AFA2AA83CD248F81F326264CF422E89AB872E2BA051E617B111D28A7222F41B4194191281E68A14AD48BD422D182A5352D286AB5463112497428C2281C81B524F482D12B7149B422A46417178F14B46455484F25B54234988F43F2221A47314A7243B45C62444AF8424A484F4CE88CC9544B1947642F8DFD5F
+:805C000064848F8C6D824B144F42C4442FF34B92148487324138484E386E1A8D114245A833874713C5418B41A187C36E188B23289F14B531722435424618A894455418214D14444F2265C217422A5121437161A811CFA1A1425F83B424F4289483AA124B41B7854E448C47F28242B09C7A98A4348F28F8A5790018844018844442480324C0
+:805C80001648022412201128011246041002181002001811981118111815C882130115081B414008802211281108702F49F215325FC3721CD667F41B189FC1B131B73BF27B389F9652149D132F465111DEE86AA672C57614F424348F82F339391F13731C5A37BFBCF5415B4FC4EC62F222231FB7F278284B234F62F21F451F56F6958D8F69
+:805D0000AAF83A5B2F17F735176F63F31415BEB51F3AB82A43F34B4DDFA4F4C3716D846F64F462762B76ED256B668E88BA73B4F22554245F63F36575C5D7D7F45D599FC5F539383F12F37B7B3F92D2D8D211F25822B5E9A9F82222AF87774EF4561CCFC6E2A2F33B391F13D3F95133BFBCF41143CFC3F224263F32F2792B9FD7E246E746F1
+:805D8000C74E4F47F7D5C5DFFBF83F762F16F77577BFF3F33B148FFBFB8787BF5AFBA3982F8BFB5249AF8CBD2EBFFAFF6EE66F8B7A86FCEE6C6F44F4B4346F28B93247F154766F43761A761FF65B1C1FD5F1787ABF27B31BF1282BA5FD4933BD7939B5CBFD7872AF84F34616EB45CF42F72838BF93F331395FB45535BFB4FC435B6FE4F43C
+:805E000072663F37F66B7BAFD67214F424266FC3E442F295C49FB2F33E2E7B777B337FF6F3D4DE9F83F6DDDEBFD6E621F5CAE8DFA4F5C7DF6FE3F87E4EAFEEF7E232ED876BEE6F84B724E228F17D5A245F67F73775F771DFE4F27D7C9FC3F3796A3F27F57B7ABFB6D69AD231F35A52BF95F59A9AAFA2F67A386F44F17658CFC3F61838BF12
+:805E800093F521285FF4F42543BFA4FE1353EFE3F736263F37F65B7BAFD7E245E523F717571F57F7B4C58FE3F37A3C7F45F77477AFA7F7DED6BF87F6D4D7AF8FCFDABF91FF5C5FEFCCFD6EF4AF6DFD4EB6EF89FB1E9CEF8FFF4C5C3AF3C4824FC90B6130260048008004008C0448241A14A84189220100002142311002184218104408483D
+:805F0000400882E0880484448E48208922089246043F9101828041188C921828294148C1681880418841C8242242130355887221321841282C018CA5240021E022012A01181A0216081281924432812A344284188420F85B71C0421F41D228F1112CC3F4912CA7241D24AB141FC1F24A911B21AB9455B84A3934AF143934AF347934D812CC
+:805F8000F934481CF9244A5CF8244A16F1264A87192E5A96D5A2F49824ACF491242CF591248D121F49B248F1912CAB141FC9B24AD941B24AF91128AB9451AB944782AB9443F34AB44783A9F9244889F9244ACFE30FBCD541C4511FC1F246111F81521A1D6C2F16E1C1F24A851FC1F242A15788AF147914F84A8143F34A8547835CF836489D
+:806000001CF8261A8D954B8216E1A271888565594D4B8F49F2244B8E284FA2C5648D128E244F24E1C8D22EE181722CC2242F66E9C1D22ABA14F24A9236F84A9443F14AA643D34A7A2698BA4F22759607108204000000008002000000000080080000140000480000000044000000000014F0C56F0000415028151844F814288341214581B7
+:8060800084D42821A125214C3361542490418B212E110049114818025A92921425012C9121004321612300122694162E541A522428434334442FF1025A32A2C011896557181B122B1411A0128150482C420481C902494188E212446424C0488F111268434A11E84611C32490244F8992848C911812A29C38481A286158141028189888420C
+:806100008641D83B0E7622041C81E42221F1142189551C4568138B431181684D12128C962A64471295A4213374C491482E1146D81843943989018D262E416BB424411E8C643628012E849999682F4289919528211E4CA2D022E24166581E4CFFF10F80024489D1C1541810A22118006044100A1841381A0480021A12023018414225288506
+:8061800001141922224941882101120050144C21825184890800CFD20C2001442631112400682C318114400140C8224342742428148102508228481A82410410022B12280000811A6424128B14123441242200A90888ACF4F438244A032D232810028312D8B48122721238181A142FF14294218925278822C24A142D154224FC427264225A
+:8062000022EC4231251B820027512963534212A1382214463894A021124C341462D28B42F0CE1CB0120613322213024008D3B122417113C818184581E16C81321E1A82822682462211022528B1125242484313E318022CC21123128184F142184218871190942128184C8491C29810F815F71480114204330129128846220AC04384508203
+:80628000803644478840115812548C24D24136224C24820843022B124024C13410081E222242894541C41222406482488B2C428FF20930248C52232444C02284441A0227412644C88141E4105A9424942E18A0284146D24821D12441A114108162252849425848481242811524542A48188200436483404218F8D34BC057485048121410C6
+:8063000092214220446C32512C02604124E024818251841748BC141421144241449818274146041C08AAC1144008874821824F184102182C8109C14622C2525F620D2051412885512844CC0189028400102851121C32640012822A4402830328839228A122412420C118122180A2214400401848048C0A428A419444608AD0147412D4210E
+:8063800052498551A64436DC828282532818454371894256851F22714854964AD18121D248C2262CF4542A8751788C51281883D261C114274130351628CA54286E1884954242DA1CC4184C8861AA4A298211C42485F27C72A01828C1282911410214CC044881504822185042220028862814515800244C322287440022B022618824160C09
+:8064000012408488842849022041E481D448883448486DC4601413029142304213840428D04141181901111001112810011230431111001854111646213122452142011CB29154124829C8810022230846021A58282FAA0126444231128139811282714118261532426024B04612344410845138106824894152248744496264285024C058
+:8064800014B594142225582641582588084361C449D8427282A4248860486688F48BF96018400924C012182549D8281851188941E584C113182541110214142210438171421158A22825221111110A2842112253911415827411429111800718A88128442D24CF440D2C4184021248224C02222885041C921228002A816112602620242261
+:80650000A28462200512E0882284026848126223944886082C02822138200443250148828F1F0521241210322810083502469188482C1E41914143CC6819115114100515021144491234541C7228110414A9521E14411C41C821C0816011442CC884C0246382288442F17DBF00190284005428481816A1122124502400160280331280517A
+:806580001220014A811849415424422136388156220826C222A04B44008E42C042418240848191446F124BA1421844E0146221421914280620912400401408441028118895584602108116820480011880028448426081442C0446082A08A0148C08B03C0A20285221165C8155481C82D181548248148C91284B582C6132444E22490410A1
+:80660000140313888303218220982214284011624412282568422C216844182306122305632242C2285F9D08AC014D4A4392818E4412100140041A624212282281244410D62C82512888890285026012640044484240548344166148842E441B412884410041128149318282CF570317134F28721BD1D9D2945A316C2236418D138628717E
+:806680004956189BB267152F21F116214E8B4D14344D51AC1259D295429A58562173A24192122E241D9622411B128E424E3115F2222A93736AF881828C9C1B29FC17818CF548722F22F884A23AC4A41E34A81E918F64F64FB1803282AC8231422F84F937511D2CA3F163481D31AF9482E9857146A4321D254E16737342BB2421B225653119
+:806700004F2284B451F4E2832E421774CB449FC2F614221572AE78417111D78C721EF12A422F4AF141416CD151F4726C1B315EE21B156C7583B226A841212F443312CF84BC86E424B6A278364BF344521713474225F219528F413648ED539CA421A7661D5227915D4216D9A9A4841B428D341B423F44524116752418F112292F127111985C
+:80678000336D581D1E61EE4469C5216D462B1227311F867315F44421C5F446214F21D31C71EC631A4523FC5C8586F4442476B484B8E411E2C331AC45F845550000430288200280248244A441A041A041890228A024A02480028120044288001044080000008200200800828304F0E145141F18F4212395F319735F7FF321269F86F2393FF3
+:806800003F17B721F3111A3F35F3BA915714AF193B445F59F96412DF7AFB7A1A2F1424F65D596F1454FC8FACF45B5BAF967D1AB922F2A5A38CB4D6FC52511F2CFC41463FB5B132E31BFF585EBFACFE43649D2EDD2EF5FEABBA9FA3DB23F54546CFA1F92AAA6F247426D622F826A26B2285D888FD2A6A6FC14FF171533F96F41937FF71F7B9
+:8068800077F71F69F5572CFFF3F37B711B335FA1F13A3BAFD95B54AF985B347F78F936377F7BFA3F1F6F17F576355F51F12537E5DFABF85B5BBFB7793AF967327F3858366BCD2F61F1CBC67F74F41757BFA3F3B9FBFD3FFFE8FA6F6DFFE7F75B1BBD1ABFFAFB31321F72F75556FFF1FB3E1E6F67F5E4666F68F826244F427686FCDCDCCF0F
+:80690000EFF7B3EF243F41F42167644F73F377373F67F31F6E9FE3F77B3239F1597C1F35F2DAF3D734EF3D7D6FF3D7D57F76F1E7DFFFF7F347457F57F135154F32F34F4FBD8BBFB5F572733731AFB3F2EFE7A7B46F6DFD56527FFCFC87A65F71F73D337F3BFB5F5F7F7EFE4F4C9FF7F655767F74FE7B3E9FB7FBC3E27F7CF59B1BEFE3FBF2
+:80698000F6F66F66FC62D66F26FEDEE8AF85DCC4FD2C9E6FA641E169D56BF43B3E7F76F36F371F75F1776EFFF6F66A223F35F57B78BF97F7DFDBDFF5F5EFDDCFB7F5C7D76F76F7EFEFDFF7F777754F57F335355F725277BF92F27B7BBFBFF77361FFF7F38F87ED2E6F4DFD56127FFCFE87A77F51F32D1ADFBFFB3F3D7F7EFE6F6DFFF7F68B
+:806A00005F59FF55FDFB9BBFBBFB93F35F7CFDF795EFEBFBF6F66F66FE66F66F4AEA89FF74CC4FC5FD6CFE2FC30243021884418449E18164221A048424844048044C2201128504004A122204002022A48220422882041245E289242201820020C122800200EFB2072905181321C42422848100122001322001433142414018281288012A9A
+:806A800001262811044828496181008302412822844212E08304802801124CCA493F8B0A2CF4112485F2112483F41124A3D641B24AF18124AB9419B24A3915AB9443F34A9143F3429147822D914F82C4914FA2C4854FA2E411F2244A87192E4A96C55A9E24ACF491242CFD9124C5F2912483F49124AF24F18124AB141D24AB9419B24A1909
+:806B0000B54A3924AB9443B242792498924F8284F9244ABB23C04B1E64AD4313714AF2112487364CF24A111F48D27AA1488DB19AD43AB8B5D42AB8B5948A5994927D482B945D5A4E947FA2EC11D28538987F22644D6DD99E252D8A1E2C6D599E64E5B391F246839E2CED938E24AF14C124AD978E248F3493248F7439B4A536242D94478A24
+:806B80002F44312629F924583F6E04848248820000004014020000000021000000004001400848000000000028800400001002EF4C4B121403288418361CD88182023018161428112C25044601C02C8C0425012691141C52244D281622C28217421292411E252088912C18119812CA8126844284824804C3E21646A1524B18A32181613856
+:806C000082961172927122E811223888174815883281A52425722194C8241C5241421821D04AE182211564512E11824D216D2A6E11244F11E2817264C9421CE2814891441445AA218D422021061685F88B2A9042274D811284922F81D21898211B1269C2212249C1891843822524E4320460C12088441261611353418321B12B21B866888D
+:806C8000624363741423A2288F41C42E43C381AA11044AB242512844282A48042769DFF60A4B121129818211918412A52218289198864854818113584A1230258B8426F24821554281810285E4A2E1441244E41211D13461882E11284D1116681248141648A1414E914588A2422021044C61822FCA0C1001001123423448008200000000A0
+:806D0000000042A41001118048448242013450182881442C0100AD9112002901880041C0424F36062440021054819013404271130818911A142342611414414712111B2442898218584184226041308484416021430450249122001C08484848832281664828F76200400210548241A301C0821C014009212214421440052E4821944049B0
+:806D8000348844B016126148154214C8224C142441548128990182200442838231248624F244FC00350800111C021C0464118C0212A0411400142444225661184228821041810284004608141284400221708224430123212408C0426024DF820E002485042250164562228418160250422E1827628015A484004622C4141820442415120B
+:806E000004202182084218250110A248508170220818899128844241E05A4691141445081341038512C1D110028111001820220813122C481902121240280439E2480350282AC4184412150484218C41628144480030142042FCCE765021241902604100848140111101008C880183321820128C62A6493229C09222104212712222D81415
+:806E800001288224000025120440181824058400E792002563C2C1F02112502E45EBA2082711195183116132872818522E84831421F248821B24A3C7342A81B414888744641226D522233A152846C814172144508227282C51688351424688D148812141684285724C014D1140031C410411B0111408000085323420122889528444844482
+:806F000021858101250A25022909608823A4212C081400488111608240082E48858404412F3B091440014008110018008481410014221C02400220B1220422444828002415148802400221100A240000220060824224AF22091002122C8152420016D18308212C48C181215C48024411814601150C184912058846B48241C281C0121D1829
+:806F80001F2822F28118452812E8140125213111454808A41E48484840E817070011407228020020490288944D81D01448231244424802822C814404C041200888154468128601131802904300211144200248F0482240727507953A482021014114D02151D445B424E2A222420200C0232513B251A1118F59A88838284712441D814D61CB
+:80700000395188B5BA48A4542F846122228951842942D84C51644F12A23232848410981A46522229B418F1A5BD0018100341120025022100200884121100400480420226028008000000241100800440210400120000441F1E0A818C2484041002214014E4E862828A12110800190821292181818808812810414118E881A414482400284F
+:80708000212444618D24222842400800282129F12A7E50828004200122810044C0224002141140D22112024931248800001116014008481901411211842140042C1208230480041002BF52058004000000C084800200140000218041810800001D41008480040000211114441428400100001002185F620300121602180000408248020058
+:8071000000000014140044410000000000000000211424840000000010F4E7C5301883246424221002205844C5B42C2222021144114002241A3114921482005011105388818B5442422840020045544C6B222662860020042440A2114FC30B50884848000031200845042A12010000146121284B912E8888442200141501128588A85424D0
+:8071800011401102004514A92240480800216121CF570C211249010018210024008420116A88008800412002224200200800604188C012184002145018000044800400D08F06004001210000200810084001110011000000800200000000100110410280045622040000009F2E0321124414212150222180881858A8A18295518550118002
+:8072000012147424240210322823224402001816A41828E03151232558310084152244B24804A0440041F09F1C2400121270140250A18882D0A208823C518285210113180111114039244904000020018A61112455024012D223145228948D49008112000044CF380B121818358282B11221022424A18200118058118048414144D144A2A5
+:8072800022408482028A090012003012312641015019318314A25421452804800241CF6B016F22F212222E122B11122B11C0123592822F31F111139B989E888D888F18F44848D0915411488558884F84F448444F42B444F22424222E2480526445E442F226222F21A2129AA1812B99823C512229F812131F31B189699987848B488F8424CF
+:80730000E48404488558884F84F47C3BF0262265A2123A211102142592822D131F1191811F89F818888F18242C44511150918588F44844C5B444A226220050424584F226226D822E123AA1812B8882822592822D131F1191819E88878189A444420040588848FFAA0A00000000000000000000000000000000000000000000000000000068
+:807380000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000002F
+:8074000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000AE
+:80748000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000002E
+:807500000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000AD
+:8075800000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000002D
+:80760000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000AC
+:807680000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000002C
+:8077000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000AB
+:80778000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000002B
+:807800000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000AA
+:8078800000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000002A
+:80790000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000A9
+:807980000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0029
+:807A000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE4B7
+:807A80000F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000000000000B
+:807B0000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000000A7
+:807B80000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000027
+:807C000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000A6
+:807C8000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000026
+:807D00000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000A5
+:807D800000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000025
+:807E0000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000A4
+:807E80000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000024
+:807F000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000A3
+:807F8000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000023
+:808000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000A2
+:8080800000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000022
+:80810000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000A1
+:808180000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000021
+:8082000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFEA0
+:80828000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F06D
+:808300004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000008F
+:8083800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE44F4181C21880412802301441E042210844D021A22186824228092398521111818188008D8246242241C1418C0547821E4848430212890180420280C222162825F13F7E242816495129D14485942E6362221AA221178845D824322163B0
+:8084000072124C37311F89B48241B8560817281626F912812B811F84B149E98428742198419C16988851468C65426D22422D24282655484E2745D842B234F42612522901842D4C5FA207211601301A4445481284810286880861403137142884810000881282828840021138C088874160C52C210422104128D4420267242052229018525D
+:80848000EEB720C22818910010022C2281C115C1902126742804D08394828692C429B88164412131811218807424281641014242808452422132C30111842604452204812C44ECFB0A110000008422440022000000381200002311C211008501C8890840182804415048446800004C42022A81012812001FC30700150815148832240044F8
+:808500002800434202230129882881810110018C3812428D41816014800411118128280044204204002022810140F21E4800000000000000000000000000000000000000000014000000808101000000F0AA3820C122C3011881442A11821288921885238111E14132112C428994484188004428004C1462821D341211828664414826815B
+:80858000621481A3C43810088110141408C024418D5234221601871187125C7212C84122257182C219103488E4008285A45811822A149248874527228C6D85212628084A58142830384044D8488882024287144644592400123604C11248EFCB4A21E13172144891188D214D1826031483681389511829111CE241E2183128278C4883DCAF
+:8086000024028416022BA18C04469C8226F83184160482A816C444938238418C324A6AC14849141908444100452813F4243730220016681244211A642228254208418928410110C411118084887448342483C41220022044912160C100C02C2200841484101402184783004448FF48072228000000250140080012241114320060824211E8
+:808680004231109128003081241AC21160121121153828100214004100008800F0FAC6001695140042AB1290188D1127925260B18958349C02844D439CC2218D14148220614483C318882B1283A3212014942811211694184902104182886194AC14C48862A4184901F0D4F7001F4211044082033195020024824551831414163121148460
+:80870000850114481C8441312860811211468291191001215528023110011C4418122812B8824104F03BC120021800488190181817828B1470184128612240686684221624820C2C1134281628B81282822208262412912217418C814208402228416844418848001200FF88029584911148481440614410243518891154488814B3127AD4
+:8087800021088145091B18C02819211168138303288C018C048418102481014D11128084110C848183C1128C11F88BAD24814C0229051049042441002E4150124480018244430223A2181724008421110031848014229484B81C0240314484C02A80220162C042A042BFE64BA11200818C311A20018C92192800208121044B12C0881150CC
+:808800008484201408131118B22821210290310081231149088C028C880148210000008F3848D14322C312818C651181433144892221C1181E41442196C4431781897321388855582C22942C841499183D182E18A93218312A01C0318143E883B82731188C41414938884E121883241118188825C168CF1606184414122484141100A58153
+:808880000684701508C02241884128118504142628010012221A0250282024014001A0611810086C02A0421810083F110312282232104208182884230600C0311C218192311C4109406B851CA4211412811088311119D21802D0818202221140010081200200202272CB0B428141811608008482004D488E4848850182004188188841181E
+:8089000045210A40088430218A02008A022021281A28010043618449141804309C825FA601121008A0242142208401001098481C94411200C08A002400811118200440C4222A014484B0188828015270180212A041208102414F8F0E1400421044111414446164490187422290182240C48822D04109104981084001B0910220348810B1A5
+:8089800084020081840000208242240882CF41072022922822008021A2122884202182220283922980082184812A883249848B42848122482294238A44882232482211008908100280021A2282F2E98640088C24010018004004400184508400361835417042018114180000008810381222402802001100108808200221F01B2CC0644211
+:808A000048901C50488428128CC48C13A424481B8400904182144098881004818001482200208181823818001880488441888834580096081212DFE703000060220028302424008180C1482E4114890122148440018301141818193281102111491861158410418918810888C088002602006FC30A8C021C04263144414954144905C48026
+:808A8000024C6514C01C58002D14C01324884820012A68164A8841888104121841490800D4CCC4284004224C0230842728F0D3A1006A82C2281E284D2444811CF394245992289741207631A143121CF171383E948F89C9949718FF7848724C3D288B1289D518014A1498111BBA13117952A29D1922B198A88413484151518C18084AB428FA
+:808B00009128A0A249A18A96F4DA1AA04640B83871282556874B1445A4548F84A18661CE481889F649281F96F44564484942F11D212C44984119F1C1811F117211018B33808A621126E1B33281267834716C18F488282E9115A889CB448260C825E84C6A424CD2A481D24883F2AEE4F0113484C712422CC142814C64832236C24A4E48D0AA
+:808B80008DF444881CB18871384851991322C288D09A51228C46688817818CFC18286E49B681B48482F12838897288D811E3C2228332189568818961816B8183C1481A2422A18A122B825F9F0D1504150411421142118819841881088841A84188412843084100008220084288008008000098808984092C9944984588490884F0EAAF14E3
+:808C00001F1454D5D14711CFD5F44B2B6D444F51E554F28545CB4DBF34F4CBC5C2DF5DB768F5B5D54F4C71C5E846F4A594457D94F158444D846F2454476AB4B1E815A4819F84AE794EE88BA11B441BAD85F23B8B2B441F1BFA4C44474B8F84F79818CB1919F1D8DCDAEDA9D146F1D8D84BFD8F49514C4F6BD9C8B8B8F9B8A26D11F04464A7
+:808C80005F5616FD3C39CFD4F64F2FF7D4CFD1F514555F5AF78915AF2ABAEAFEC5458B7D8F1CFFDCDDCFCAF3E559CF94F68893EF42F23511FF2CF5838AAFF45D232F14EE99F8D8C91E895ED18F8FE716FE19381B441F899F389FB3B44AF799B9CFC4F7B4848F847F89D948F889918F4FBF48C4A84F48F9D8D84F86F62884818FABF98AAC06
+:808D00008B8A8BBB8EC6246F4796418FD2E2427265F62E6EF5FD5414DFC5D3CCFC796FAFAEBE4AF648C8DF55F5FCD48F83F524F11FC7A4CF13F326B8BE8C8FB4F58B8B6F24DC77F422489783CEC11B118F9CA67D4EE8BEA95F4EF794C495F3BBBBEFCCF495848F44F4B4AC4AF529A895F591888DB98F8454A8AB89CFC4BD287424F8B4B436
+:808D8000C5FCA284BE984F48F952FA343F15F225648D2D1E345F61D7FF56CE4B15DFC3F73DFD5E72AFA4F2CBE1DFD4AC53DF57F7F9D18F56FF715D9F9FFF3D1DBFDAFBB19F8FB4F4878DAFF5D4BBF4AB691F9BF948591F91F1C8488F8FF769E81F9BFBE5F4DF5BDB39F3F3B1CF4EFFBDBC9FD4F7B4AC6AF739B8957119F98C398F8D7D2814
+:808E00007A1AF2CE5C8F8F7D24A8BB2AF2BABCBE984F6AFB3A7B800122001004200100486081F01148209128128182813100899211811881002A012641A812844712842A081484C04840088C840228824C027FBB0A8002844D1228811241288302A100198402421508C081C081219043000042221308008221008604840014001002000011
+:808E80001886F19F93C0421F4152281F4932481F41324A1D24AB141D24AB941B21AB9451AB9443F24A9143F2429147822D914F82C4914FA2C4814FA264114FA265192E4A96C54ADE24ACF491242CF4912485F2912483F49124A3F49124AB141F41B24AB911B24AB915B44A3934AF44B934F442944F83D442F92448984FA2F4F343D0A2E4B5
+:808F00004156281E64811E2CA1CC921ACCF24A941AF24AB44781AB9413F24A91F04A9117822D913D482F14F1215A4E912E8A87115F226D1D2E4AD6E5B2645DACF5512C45DA41D628E541521C1D64AB141F49364A1F41764AF41124AF14B215364A32A7443A54423E4825F43648986F82F54B7B40084904001800004480024002000021005A
+:808F80009088000040014008000000004004280000000021429F770919812221512490749028152821818164148C041D18442D184611C11184C21584814129D421840252143824848C8191412826414AC32889E11801482884002E144432C3A2284F2B0F22502422420084182B124E2860281628082C028C01211A021B4260821417A41ADB
+:809000005C488C91482C0838418A514121CC829218200842130212811210240212421C24F4D4BB90114E28122B2144211A140822CB43209B1813240483C1182137241C32111A843C8419C1528DC14D4817211D4888428D212A6124554A782834418361128652212AC4211743124228814122124D126A118CFA9643200241200443028F22AA
+:8090800071110812244888842C12416481200117827021081528018324022921112409121828221008811688088112003024004A82E4720A6302004722484110C2488302810084283289A8424A0800461402224614042622086022822144201934110020088414001220491484012F820318903281A9C1168AD18441218348C81216082DAF
+:8091000016C5011594141D141411418242668B648212CC2631342B42460412A8296B129038268881082C315188614E9CC488224B2426889428445FA74D6243303230244212816087A880C11840564140849554004445021C1242644180839142008A81E8429121128362811288A081428958424C488C084A8A0210F4C8AA00008562A116A3
+:80918000968416160184818121248361822A918943C2811411A0484883243668F0244830A628492452222C8208821694210040C2111031582081C214C44CB418026E5560214112214840842802C11018E441329883822682D181984244469828821285342128425C0221442A588480C51483618441413014142C122C04811002803C888466
+:809200001F6E012604C0681608C02483111C051880228204002821802164C8800246186291200181A0422142800122831424288113888141242124420418BF1B0F13C4122216342449628183880412224848008061412823816191005049488444002281181A14826182C02480611120A24220840188185048108821F85852E011D642A128
+:8092800021A3E2C16442C1228150812289954443A11A83A625411819A11416C9486240EC423421CC82941822A1122A19A6212781524C02411741421A621A80B5180483C816188744284A1888F855993084106241228041AC16C418000084003822A90A44105884164118C842302480418404801264818B1412228480C41245081218000070
+:80930000458849F8E33D80042081018504404428538200890144404408006022220040184118010000484410280181821A14A1412004802807001F290118418D241008504230883A044282430441AA24044486041748004192484210088C2101208182B8491118C4614E34D081024214B02831282847821028A8429F54462208616280024A
+:80938000100244842245084C1252128423082200254444384425C92211003024644111E484848009811800890143018083014C3818C4FF6D0E122922422631840083210400301E118C24341162134808008400121968212485048014414401501411000040448102C480B884829424F0517D00411850845828282228122116885422303887
+:8094000020023AC88416F82D822211182A24122422921400112A0118139A44302486118483010000800490284814AFF90E800241008041C4188418212921C11C41168C81012D18290224484CA28113018416081E282081E4A304121412812A8418C82C46A1284C812882D148080020F8A3E33024803428A28F48820100624A2804422AC85E
+:809480004122536442D1284421142819148864871D144400192902206244801241B411541411C4460100004189240589F4884C008A41981221901850844830281048082485419C820089082A584184608211802402282251144788842A31288A2111081828C901A0144381014C61493844FEE970644A8245982484E04491324941624424E7
+:80950000380029829122839122123D249014214A18041686A283144C4864E1244946A21260514088E2144264112820422812A4128308A74C22AF220F6892A5F828262F89013845C61483D848C1324E6A2443F52C122CF22B545F94F2F2181D298B122C7884F42281226F8434142F86F431413D35442D28CB118A322525F533158E2A9F4305
+:8095800084322113684389BF3172887914F1494453212262424FC1E342B9E4E945F45C31CF86F41EA930348E242CF114184D244F82781488B63AA2243AA68621274C4CC128AB444D28A5843A8A478926752141521689E2C2991847A485CA41819C2863255384524421871484CD999D1145589C1B3113D48489C4A4124D1820D148D4844954
+:809600004CF41E97244E1667224F432234288F4552281A51844FC165A4AF8194188F81D18AF412854FD2611D3E5245F424964CDA8CC38A4D249D6436A54C1F11E24823F338B84741285D144CA321C57238E18CFB155CCF51E341A26C17474A21B22865111C81F148788B216AB88CE28132A8AA8CBAE70DA012A012A094200488C082122C21
+:8096800008A813810A89228122093388921181B08802822A0114A01284490922204288088884888088840854E04402424D5D70847626F41E2E6FA1F452C88F86744CFC6E2E2B644F48E68CE624A7CC8F2CB482F264563F5CFCEE473719BF3E15F2249455EDB2BA66545557528B615F5AFB29476F749CA24748CF43FAE4E41F74546216FA89
+:8097000023279F9D56D5515F58F885DC5F53F148681B18CE9857545D149AEB8CBC24B294A9E4CF88FD8C888F88F82868BFC2084F61F2466EE5FC366E6FC5DE88F26C3CEFE7D28A76CCFCDC4E2F2CBCE2BED4748EFAEECE6F6CFEAF4F7F3CF66747AD28E7C25D25CFE3B344B424DB4484FED5955F7EF85FF55D954748CD8CCFCFFF61476F16
+:80978000F4D475D233D2DFD4DDF42D1C5FD8F884E55F4BFAD8E49B2A1BBE5F48F885841AF1D8D8C742CFCBF97DFCCFEAF8CAD84F4DFBBEDCFB28246D266F43F7142665F652744F436261EFE2F652781EF48FC4F4E8F24E788D8A2F25F5EED6FF56F56EC72F17FDEFDF7F5AF92E945FDAF925BF7BCE5D855757DFD5F625259FFAFC7757EFBC
+:80980000D8F2B4244BA3BEBC5D372F61761AFABAA6CFCDF63C3CCD2D5F59FB59185F5CF848441B919F8DB3D1F915143AA3DD4BCFCFC1F1484849B5B6F9A8488F82C5BA242F2DF61876EFC3F26E2EAD2CCFCDE763F33E7E2F81F75C9C8FE3B772F798BAAF81F9525AEFE7F5FFFFFFF7FD7FFFFFB7FDB7B18FCBF9B5B5CFFAFBC4C36F53F2BE
+:809880003D7DDFD9F7DDDDDFF7F57F7FEFD8F2BC3CCF83FBB1BD5F72F23F77FFF1F19FB7FFD9FB3D3DDFC3F3B5B4CFCDFE7D7C8B759BA29F8DF71D5C5741BAFB7878CF4F7C2CF878FC8F4FFDEEFC4FEFFFA4DCEF3C072B123026844184221E484302800448248CC42419C42413D848024411286044A02419912849111804182002618440B7
+:80990000E81228286288A0494482289E488922812228045FE30A65022542A4165028C4428CF2281210082D141088D422011C28C284864834221041110421204204446182811B416041411A041118008081444458481A5448F03E26E022F4112487221F41B248F11124A3D441B24AD141F24A9219F24A9251AB9443F24AB143F242B147820F
+:809980002DB14F82C4B14FA2D418F8264A1E216FA264192FA2E459C24A9E242D4A1F49C2421F49522C1F4932481F49324A1F48B24AD141B24A9921AB9451AB944B42AF44B924B4427924F842944F82E444F9244ACFE30747A21B418F22D141B448F11124AB141D24AB141D24AF64F91124AF249A258B9443F34AA143D21A7B34D812FA17DF
+:809A00004829F224588F1491C68D216FA27D98F5224ADE252E4B8E242D5B5E2C4FB2A468CD53CCF268111F49326A1F48B24AC12CAD951D64ABB45D28A9A943AD842AF442944F82F44A1463F242B44FA2F56527402888040000004004400100000000188008000014202182080000000000000000005012F06BEB10022B1218244C022220E4
+:809A800041284201852521628119C22480926811405832428CB22401232104224A4145C821189014424115484838488C2484842168424014C824829EFC20A5285028812C24A1818314848441C88C21264C2882085218802204408D7842C82124004200100288A0218A2219C1111854144CC2A8541844424031449FB30852E6A22184212805
+:809B0000122A1118D4842462128728512E148183C281C0521A324832488728D0439488C426321121102874444128021024C6249445012E5884193464823034444D428426E54974940621001285C2442188421220111814488822813224002811001484282B521420044A820124111882181288928117819045008933850000004F440D00D0
+:809B80008280080088000000000000000000000000000000000000000010010011400170E705502219214114CC21624115BC22C161128E822518B85415E322486148841A9B4947586AC122129493C44823584C18284A2C92178FC184A82E145044250A2AC611859AA24AB42411E2210887481E18A8CAF42D2A90226638114C312C28544214
+:809C00004125AA1148268178821A98144827238A48A5114E289BC814444542B818031F943482812E1649928252196148499828146614648129A342348A184298148AA4832425A4112845F8AC72002008880080080000000000000000000000000000000000000000110010011400775E0012100111421781604122111001004814800398A3
+:809C800015081181209114404A342400822D111098411830421280144218A8494058484181924A48F8D5893426042642FC18248584212211A841A3E581745C021218169C888B161D48196114444110C24D91284364422A3112184616443428294112881B91818011691113152891922229A221428441DBDB34260428414902122270188424
+:809D00009212701102187048748831488B24A094851114110A9CA1124289024C026068118123612480098E11205581939159898481C1264942A8584E8844FF510D204112C9189524941912A01493B448C14C00181880C31119411104009744101444343629217144024C2142189118282D41001002A081D08218082A0110F8CE5F002394D2
+:809D800028806441301830481C17CD12001810044418CE12125681464168848C4428C141460228AF4423043880220118848481440028209414451218528483F1B8F120A225001828842200302400168822842202294872245128242A69210024404984028148812014082441447024820248108801006112127F960B4840C128103914E05B
+:809E00008412428811CA4480186484122A114108000041200580024400401108002AA41418588004122002424880A484EF330C2229238282741954482A61862D481D488D21833146892109CB241828314E18112C0425911861608412812221446906841B128122002B614684A1142180840178431114028D548C78B7094850188418281842
+:809E800084002A21110220624480321498824C53814A22028C34482C0148462482820100428418106481818C02482012088034484180E46D08411100811412405841840091CC014061415E218489023445D8288142028522014508120015247411480224118148241005901444634288223148F0613D20011011C418488922025844410010
+:809F00004782C018284400240040A24A8D16408A215281242800329018008324911400200423C88820311A8140F25B5A0000498204701891162850811008100820818194148941280684A042404CC84260448415082810482441182A082480688400448694441282DFFB061128932214D14852818624021128CC8501814931284260844199
+:809F800023E252841184420480226411602484444846841482049012005821984400C81842308242FF21038A03109C34411A2202890228180022482621A2242A614248C302A2248F216222368224A44100224441188984C4386012428442444A8194442094748384B31684E414F182A74038244412004441811480854404462443041508CB
+:80A000001429014342D48408001829018F1104800210A12144893248288281004C8121240222803816A3F273CF14411448260113270400284008468401101404120042421248C18420C2210084B0284488013304002120241801418AC18810082D88D021084A2234288168802204A0248C0112008024049052538224428224210342001230
+:80A08000425884400414184A210252884014A438184304410024889F4B0A84003018400C0083614480C21848C30214C021859142E01411D88448048032244D41241284112A3421289025D120048744821D228230881281203C882504CB31145B42821538115B368D389742148185F161288B34421CE145D188353885F82445283CB211D15D
+:80A100001412C8255845F81A6229325223B142D644F211415823D2896242DD14683B341FD1D149A2442B312181D02371C3A4829A782488E1A271146A898FBD28F2BAA8C0241F561218C44C625AF7247284418B1136694143116C464D184F12A4247E158F82E59266434B2226686487244F8268E2848F24F3281487868B1427245845D484B0
+:80A18000A24442163A4A4D4A9558A88F81E888A881444935C44CC592C7488183C8844D54DEC8FFF5091A012E248FD6321857514558C83E241B224848CD58854898244E241B21125D4812C7444AF5435DEB44CF8AF232244E14CB118F22A24243A151A4124E2450193AF23919B02426E113A2444E544E424B444F14A8811E16C784DE446E7E
+:80A20000E847456ABF4C0525F27938144245011C41480100140040840484441110011110012181290829010021422601146032601260221A4421488204800228009028DFE84F21D451D2CCD2DDE7C4F44165C7424F4254881F12F25C583A31184AB41CF164244FC6B654F138184F43F1341C4FC3B114312441CFE2D2ECF148228EAAAA3A57
+:80A280004AE3D54454288B5558474245F41444817E526F95F56C5C89F1482AEB8917141551357F11A3888F43FB1C344CF19CBC9AF95CD48E182CF2EC49E044E244D2CCD2CC66424F44564CCD6445F42424CF45B718F73834CB45CF81E243F374745B35CF837135F4545C77834B351B568782CFCAFE161487279E9AAFAAFA5852AF15C4489A
+:80A300008FB4F45258588C54DCCF817418A1554F84F544544E19428F4CFCC9491F1EFEC5C14BECCAFDF8F4CF45ECCDFDC4CC4FC9F9DEDC4F88ED89F5DCD5147AF425658D28DFD1F35C4CDF56F66C2C4F4656CC5F53F3585C8F83F158784AF45C1C4FC6F65C7CC75797934F53F131116FD7F53551CFD2D111E2E2DEECF5686A2E228F83738B
+:80A3800048F84C494544E285B512F72161D5FC111519F1717BBF95F579399F83E5A6F39A9C8F88A86455F393914B88CBFA4F43E346F528284F4AF94EC4CFC4E426FF74D7145F55D65556555FD7F3794DDFD7764DFD5C78CFC1F31D3D9F57B738F35C78CFC5F57C1C4F42F65C5CDFD7727DFD35359F15F77D5D5F57F76D4D9F92F224CEEF2C
+:80A40000E3F57C481AF13A1A8FA7F55A58CFC4F7494A2B552B319F1252DD1F15F371733FB7F77B78DFD7F37153AF27F3DAD88F88EC2CFE17173F5BF9C4D4CF4EFFF4A4CFCFFD2C2C4FCAFC9CDCCFC1F9E8FA2FC60E221044382484436281002216081A0412281A84028922E1440289028744D048028324022014042280C148181E4820010F
+:80A480004820482449A44885042049048F9A0C86112112011781202152C1183048109844C0481C2141954181411448286D12A0121225385820110214150C48251181E181941A001A54122A041290444A01C0417F330A3CF4112485F3112487141FC1764AD341F24A111D24AF149921AF1419F54A9143F24A9147822F147924D812F9244828
+:80A500001CF9244A1CF8264A87116FA2641D2FA264592D5A9E24ACF4D1242D421F4952281F497248F29124A7241F48F24A121F41F24A921B61AF2419F54A924B42AF2439242F2479A4989A4F8284F9244A6FAB0CACB11156281D64181FC1522A4C92181D24AF44A921AF448BB24A39242F14698229392429F9364829F9245A986F827C183F
+:80A58000F126C85671226A586D5B9E24BCF4D12C2F22E44954289E64836649EB1686B4687191544A1F41B2489325AB944B424A19A4B4848D346F8284D926D5A60200480000008240042800000000000088008100140000000000004004280000000020F4B49C30240020449A1C19642324C0488CC1144283A4411243883815C04C44002850
+:80A60000228129641149042B424602248061CA2220F1211418304280A4484D5A87414B41A997488D249018F0A5AE003F28624181841F42018516189C1822406A211C01158885260622C028A0144508851412A2414D182D14523287424D234A11F4122487428984288521A418148022084301411483F4FA8D40661623113848851344C32AAC
+:80A68000C12062C2CD124A31484883614C2ADC340566244128A843818146581253846482A394426A21E24162CC261462C35B25984725582A2431418CD1C2C1928B164E1847A2448483F513AB200241001E2489C14C18901A8C840124138111810128101884023024102611229156168401E1112B12B024018100008A84984428490441006C
+:80A7000018F0824B4092214054224062C12244002C01188414843021142688C24842111261460581604D8052241A0240020080048008814B491812892368441A44048F984BD1526141828962838D41C4D05AD118D48272623A481D164631138C6E64C0444781B0C101112674227138223248636561224E122440C1324331242E4244242403
+:80A780001F22F1881118B9D121C145248F42044974422CD384C81850EFD04131228849F21A2248106692E42846784252241215F84128460A4E214D11284E218314012B21E3E1443248482C812474224282211242C22241004E111818881C1188D98482F1483489BC14E241484CF2747F10D241018110496C81693141812992181CC14129D9
+:80A8000021180441818198809425112C1241321C41432B01412681C1144C2204502228A718249C01671446B412042441428924015FA745E244622516182C4424012041A824124698141C0148243265682241818051218C1822A21216810448200438AC4104886A28024D1860844887241014082658824C81F1E79B004A027022048324612E
+:80A880009128008243410147818484204A42C81226C88822128441501818D081A2215211812324C1644611284118844284018842182814294828E14A05400412103A24240040180A818448121A0420844144C44418481A024140240121C0140028882C62112011210820911C8C81041C0820F4AC8624441E2421C9D142524A8F41C41212EA
+:80A90000328428A971541868818CE481C44232678268C445CA24C9D42123C138224181411866A1211853D128735802AE44823F83A4210082C3A4417012D448351822848200EFE20E2A0489014220028501C04888C015114C0189018880018100AC04411A822105100200E0410219860889711108001E48890842804AD84881749C0D5964F9
+:80A98000181844895494114FB21414141108644485851424140520044A026241480022004604412243241402290C2112884261182D426A88942280120A4D1A1F290C004008184418281800521321110226518129010068414D42200916021628C12220031210088305AB244C28049858001288800418009FF3042048342800421842148C1F
+:80AA00006812811008111200A0410028002290522004004240041842210080881C6224C01441A086450243A4814AF8E798203124813143219618484C8282618121002633184601AC4261C210042688C842004604C064202182044C02162482239822400442302800A0921A28027FCA024C240112100441608480324252100AC1111304B040
+:80AA8000442A22448494142314843818288006C028188C94248448483880820C4CE142042A44B4289814228423F2AFF400282AC1226850840049828204604416148222D682612210924A4448002242268452144004800110012C213144184C11180420881188812C8424F4977E1429021032881A826482481961A500C018F0182400224914
+:80AB0000840400242848800200408282024400232242040040028284808D04818885F49BD4A0128222200222200100844180024822B011826241418092142818801301802184013024181004402401202C1104848E1180E81281F8E85E5082444D486412C681018148E041248102122E411818437442941C290218818821412410424102C8
+:80AB800025084C8422812406442CA12444182840A2414901418504A502FF554DB15434A42A3212AB91493134C741429B54848F86F21848407634341287128572116A142E444AE4C6E246242684013E528E448B15442E224E641A0318682E284CE282A5444E685AA371388B1145064B462B234E424786176896F4224C3EA14F82F4DB47249A
+:80AC000027428E2147E11CA2264EC1CC85D348F534254A42A1144751CD18A5BB4C7345B42195385F623348451694248D4C1AF676C43A64443AD28202424311A221C321714C64258F4562624F43D16438A2DE82C24AB45489F84C5C188A949458DAE998D522F9E1F2C031169418C7E2CCF4312C87146E4B4B22F098112F2115E22421953181
+:80AC80001F92A4714E216F5694424F81A3B248D0247222C4222764103621384425A24643E24252441E52195422B825223844D0242CD122E461A188439BB87E48CBA2818572C8F483C714800118400120410100002400122412200100184218800122A0124218B024012E124002472212224082C4224828C024800228EF35470122CB212EAF
+:80AD0000628414C5DC44D2CCF224258B4424AF84E444F44444A5B1220247448FA441F42C4CAAFA386844CFA4F126266F211C62236F68F81928454453461A64848F8112A44495FB1C4CC5BE145164008F84F48496684D528F8CFD54146E889788A285F81898CFC4F42AF314126E44CB22CF62F6645C6E414FC4F44434C784CFD2F26C248F7A
+:80AD8000A6F26A6C4F44F44C6C2AF26F6D9F93F26464ED2C3F54F26E48FAFA7818F02CBA6F66D226BC62F664666F685A99457424764E9E428C54C84CE44651FD8558EC6AF414866EC48AF868A84F68D94446F29CEC188F84FD9C5C4BDCAF84A4FD4F8DFDACE41419A543CFA1F232288F85D419F22D48CF83F75C7C5F16F6494C2AF24868EF
+:80AE000085FC4C4CA712BF96F664455FD7F3611B9D5DEFC1A5AA8F82D7C8F46CCE6F43B272A6414F63F49E8CAF91D244D264F2162C2B451AF418284B338F84F61B2BEFC57446B616F3C2762F49A3748F8DF786966F41F52652AF86F5FC1CEE888F9EF8B4942F8EAC924D36EF1A41B313A773CF21F37A32EFC7F17D255FC6E486F36C38DFCE
+:80AE800092F2693E2F26F24E788FC4F4685E4762FFD6F374155FF7F3723BAFD1F73C7CFAFF6C5CCFC6F67C4E6F47F3F2722F23F37676EFCDFF7A794F42F224266FE7A3558B31CFC1F374348FC7F37F7FAF85F556762B772F6FBFF2AFFF8F8DFBC6D66F47F5E6B6EFCFFFE8388F8EFBFC3C4BFE7E78EEF84F2EFF3DBE10022210C44843C2F7
+:80AF000048221E4826A241C0484416C8248CC4261904A0246044A0242014221402201402004110A441800482A041449A041A442439489220D8F20A824C1248342213010015344828001811215150848B2441205248411086722402004014820244418C148612A64929818401215042862854844248C04A96083CF4112485F3112487141F04
+:80AF800041724AD341F24A111F48F24A9119F24A9351AF343924AF1439242F347924D812F924481CF9244A1CF8244A56F1244A96E1A26459ACE44DC25A1F4DD224F49124C5F2912487241F49724AF28124EF24F9112CAF249921AF2419F54A924B42AF24B924F4429247822D944F82C4944FA2F4D3E4C05A4CD628C5248B141F41724AE2A0
+:80B000004132481FC8F24A144CF24AB24D28AF24B925B4483935AF2438342D816F8B541A4F22C5914FA2EC14F8245A86E1A255586F326D5D2E1817CC6D5A1F48F6245217886A7181FC42111FC8B2667911F86A8415A4B45F88921A4994BA49A4B445C8B42D484CDBA6D52F0D004800001200400428000000000000000000140000000000CE
+:80B08000002002280000008240017F2F028234128CF22B144C81D184124C92180050525E28841D5882124152899C44426042428991144B242089848211141638744C92424D411B121A2C52821221430C44C8A24482C04841AFDB43832208234112C9A8002014384889C142148052842E44844998111C024224180084428CC228200422266F
+:80B1000004840040A41C428883084A0844838121012661848FD209297241226181275327518B21261C0C4945287618524137868193918478A44B414E915B43A048B0121448346819A4288C96281A644428C44A7328844434114E944F222464238938448841436482412C099CF21844FFC50B00242881848200100A812024012A141844240D
+:80B18000180842C0242081410483010010861204211924029884888088048298120042246F4E0718000044000018000020041400000000840000001180020012000000800400000047828074170600004211A1112508A348480840460110C4114116140810028014C242430223813114A45912481102944121000080442244084282C4BF5D
+:80B20000AF04000048340081241E888181004413041441131144440824100846020024111812814942981121501844008004008004C06860445F390E18000041841502000000240000001200000000486902183024241100004002000080440281402418D84B04112200212004805228001002840018804208424840081800000000002869
+:80B2800042121A28122808840044001008007F1A08001A0240080000001800120020230481840000490418208104A0210018184028A44842004888202102121A02229F290B0000004028012001104401400A002288008441002228000000804208842889010000204108002006CB9E4081020084480022800112448001241832628486187F
+:80B30000284448084C0412208104A021208281048AC278C20080044183810289812284F22B8400A01210024088018502002111811008002820041004182822000000008C8261818901818A0484208801002081022FFA0B0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000015
+:80B380000000000000000000000000000000000000FFE40F8004000000400428000000002180018800004001400848000000004480020000001002183F5F0B0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000A8
+:80B4000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00006E
+:80B48000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40FEE
+:80B5000000000000000000000000000000000000000000008400002001000010084200F0D12E604100221290248904180011811210048111480080028041E618810400E041020011420044882800004A218841880940086E3F24284100100880120A8180150128830542260822800428A04260222200241084011082335822188001892825
+:80B5800041088820840200DF140C164404221230248C2402101841C811001038412A0428A0240018641CA92400001E244400118033484922212201838821212808422200F0DFCF302200008400241608001A04C0241E480081000080024A0230220010021840820412200800008C041281920081D09808408461412211411B410021124099
+:80B600008801211281820046618210840228002904418081824128628140282629A2410018480089084C51848141AF18022816424828018913C82C1AD428420211814C3121872449D6245594188460C4211C341219A4218B242E1284812223220800424C818421048890441C5848281E4C2A91588C26BC4401BFA606222031180084004662
+:80B68000022901141210622489A24815880183724802241828282A241448042282188480112424A2488004448884224A913848362888019EC2006C41488413E142F111484D281289022184814391211698444311069C0444414E21304118842B2121842829810280924818841A248122094819C144108C38184C7444D84844D4E54501428A
+:80B7000083A112D08162812A018071248223041846081820C1421184221CF14812188924048394648430282367212A91448998882846382C28412A018341A2144A61881018C218129766202444044844405228260841891238141004840047281242B0A285028280422101288961448484102202224212C12200228D24C0342210021AF46A
+:80B78000844FA012184012042A04284126480851001004493322840000400683212102211800004004000080C48448200820248802846E58A0251841244C1469842692286D288371281268941604CC44248121D1849811602266C122418183A4218B422A15222102D0820249E88822B22824A42181428624C122C924B184A3248C0840F8AF
+:80B80000E2590090181A024CA21212002280110412008143922248C0480083C512C218004484282CE14192181247248400C02C00183048808B14082092182CF46DE680014C323149C12811441AA22100411142B01C9218818441212843048B42128302160884281E68208122A22162001B1431D0480C27448081041288188302003F1F0B85
+:80B88000242C1228044845181832420000182E182032144100841411000000200100901800444285C4584081216991260890844820014622F61BB4001810D2C1B2111411C8284127A1181884130221412440C8282280846182A024421842005E28480010881238420012A34608481008100C4141F0675900804208002004C08C6B8418A12E
+:80B9000084402802290124154808112C840113044200301814000012C021400400824A2982210381008DC32018042001201164838036182021A11244896411328C02C4003048400820A12120850228004210018C018C024816280286584881806114AF17072E189012122143C14A402284022EC228B02114044400C048008004814818221A
+:80B98000001A02A04112324840A842846218E084122892884AE14482C4248248F0528A0023433422422648249442244244210044811901C3524240011110C121111C11C118284840210184118D211041881681621486014858268401824120F25A4F80061851A9022449854188A11490118084240218005242801208220042000000814022
+:80BA00000810022210828408207428240600F06E2750848004111120421C042D8424282304003248841002CC35482A081618011A42410884428C048B414885118263D4704225A128608822008091882388F1A118C0328E226D188F32743AC4448794C7A5484AD222B2486B4814488B4447C1CD2449E39271380C265AD187848B42814E4802
+:80BA80007049E91191581A95283618A121818C13098558281782848FD16422921691288CB5C8A97543088B2343C891127FB30C2212F012145B348B1715D242A336AF21C518122F21F51A123F81E1A2A2221679282491162AA24490411E282E682E212D381A112181E28785A251833231221AB548A6446F95A4558B641B14BB648CE5842474
+:80BB000034282E2847424CF35C288885A4442B2225014B412F42E1639221941D294584741E7E242CF58242CB8611624F11B148A11256D86E04A5D818B34C4425D41111F8384148486E28228025A4148C31186E2857823419D11A7221E52AA211B7469B881EC8CAA841828F87EC42D584C188414AD4C702B0220161481C8144224122019E9B
+:80BB80004824125C22410114128501000042208401222032411001842200122220022009C02480022098283F790F4F25F674141E221F13F355195F55F51913EF66F74C4C4E546B262F24F87ADC3F14B458F349551F57F528249FD6F5692B3F13E382F231191F9114D49155881F16041F14F419198F81F238288F827239A1661F97D299A212
+:80BC0000221F14B22152313F34D513F37D349FA5F76B7BB7168F81F1511126F8B8F8CF82FB6CDCCFCEEE8151888F89F96A68AF440C4F26F67476C7A29FB3F73D3DDF53F31D14EF47F37E5C6F47F77A7CAFA3FA52F41F35F453116E645E541F53F24175CFA7F21E14AB221F97F34959C9F4A1F98B229F92F829398D199F95F459598F82F382
+:80BC800068791D391F12A37789F2392187859B2697B437243F11F57D3D9FF5F5697BAB771AFD59112E288F8EFE2CA8CF84F9ECEC1E3A65FC1818AF83F3DC92F074626F43F73E2AFF91F257115F56F655596B76CF61D76CF77A3CAF84F95A783D13BF11D14CF1785CD7528F47B768A3333F92E287F3455D46F469E995F969691AF159411FF8
+:80BD000011F148798F87A6663E281F16A6418F83F338381F15F729689714B7B4BF95F37D351D66BFB6F65B719DD91D9926A8F78F86F3E8DC8F8EEF82D1C6F894D42AF781F2F054724F63F53C3E9FF7F15C3DDFD4F65919EF47F33E1C6F47F77A7AAFA3FB5ED89FB1F15B59DFD7F77C7C8FC1F27177FFF7F31E1C9F92E287F345458D459F64
+:80BD800093FC69419F9EF659599F15D411F178798F83B371F771717AA7519F12F239318F86B2697249734BFB7B79DFD7F361633F36B65AD799FD4991FEB87AFF3C38CF8AFBACE44FC3D3C6E825AD76AFA60F4110423822844D12844302400812701108118113D148028304830483048912210483A412C01140011C81048C44A14114160824
+:80BE00001A048A0484200100E0DB094B1A122A711104174120C1121E48229A76422241A1428921C1349032C02141812200285881182826282422018C22C24824B0280124684038484889B314A4A4412841464471CA072E521F41D22AF11124A3F41124AF34F11124AF24F11124AB941B29AF24B915F44A9243F34AB143F242914783AD91C3
+:80BE80004F82C4914FA2C4814FA264154FA2651D2FA264592E5A9E242E4A1F4DC2421F4952281F49326C1FC9324E1F49B26AF18124AB961B28AB9453B14A3924AB9443F242B4478229FB2448984FA2D4EF022E1A1F41D62AB11116CA24A7321F41724AF21124AF6638918F64F215688F2428D318BA24F442911F8194AA7F8394825FA285AF
+:80BF0000F925CA4AF8255AD227A287592E539E25AC74D14CFA91648D421F4932649E28E7141F49326E1B28AF46E148F24A3143794A3124AB9422AF443BA429BB3684F1A65ACFCB0F000000000040040000000000000000004001000000000000000000000000F0456B800189418181815114182628B38804874484836188841D18280081E9
+:80BF800020025311889312588B522842424850422826C8186266180C13440A444528317848412A190CCA82F434773024B228459A48158822833214208205458122A341418C9114832AC1212006430228214112268C32262A61821240420852C198584A2189014149CA38462CA1831629F245CF9014522A51148904324C23923C4B218B86D3
+:80C000006A415C4189B288C1184391384D128483A12122AA044CA2122F21827171A412418934644A1126932812A984B64C11F414C116B82241741408833764CCF118C4A42AB198A4255F4E0422288184297111081118000048811228488501200A11001645082044082E48282128830240284208848024240912448228224C2188029F6615
+:80C080000A244400230218442110A82180144808845C22081242260855088042082228220011C1122268810012A0412150228002288648648142A41F13063624B21412CC148C7441BA69E11364A12800160B36C3C512421A24B6446213C027222B523899B4448195184626252664432826B11C14B454D224D585828406819A14282591640A
+:80C1000098522B4144124AF2BC6F902425841254426085336414831182018D11211911143824808201283C62C218182847816083284268484C22024A11B44C92442D2CA02412252808482262AA8114548418F098B11418284911889348118F4231326082222044782832C1181CA41C484E246E118444112B4228998424054D423800135149
+:80C18000841E21262C268141810548E0244198121841C09A4A8121B428F4BE6AC02442455241C01B2880012227823885C318141221422260441223C4288951824D482842181E4920018B34623860814488804802492202422C4328248121428821F118F940E144018B12424048818231184981A2184128C3224521C188281461498431118F
+:80C20000881A0870240122103844004412224142809E442A81C814212290684A129842481A669C80051D28402422A112800424844410086081422282490200204108460826044A02004042985860814160188004202C038180322483F81514C0214487427528E492911A8081C4282D18214D938901260E1324648A4B244711496442843741
+:80C280008149A592423058438202122228701C32182E58448845821C01C845028B42781E288944B84842C4A85EA9905412141A1204221B212212184C921884441782181A941832208802830488848130584302184AA2424418004488B04801228A86014A219382202483022B34486FDB0D00122004321004812A8121114818732418410146
+:80C30000004A020080024800482A818302920000444244484812418AA11600444781283622F2C5FF00C9024E28401488D228E1288265242C623818C0488651282602704A02485668148601911A28C4D11C984225810100004CC4414429018241144342C884412880280CEFCE0D0085124488810200000020A12100004898004C22711421C9
+:80C380008204114228812280026A182402008022012A0120220444C04242FE5700120090284C2481240148811A0259021100301211121812800622001C02424291481D28B021611422189C224C1104C200849260284618027F7B069222A415081048C82C8D84412284201112440890218005422C3844218062112282902120014982240115
+:80C40000423624051A0619614148A012281822258863127FD7068C06182C82162541842182220100C10041222B4100408224C24889042812C042608180A418124852192154221A021A8202824392444321E4814404F033A100604241840048808494821A04A08219819441218628241293138584014146882C8C6118A48400000028206817
+:80C4800014008E244004824820281802BFF30C32302420420822C0181200844130640080221324021CD21482420180038001484420422482C12200003048C0441A04432124041AF4B14240888104212A21C458683028449024892615CA4418424851332884012C38148D4420826812008C6412484896C168188470B4C1815C41A12888686F
+:80C500009880386822282308DF2A011847898FE1E34214B814A2362E182AE22891244E32844D124285CB319D2D8511919243E127D132E424F448181AC2212811AE4142881F24B418E512E61182E212A15B47152A95441C644498121A61411CB8E4E48386AC831E188F2AB224E81813B2AC0F2828D08B92222E141E448D64ECA4278D482A23
+:80C58000A83496D988D242735E24941426628619914942145F697465F243D4475485A8111ED16AA2883D281218A0E1468132512E385E16CF3377D1C1314F1A14B4FC014E8443A6184D444F81D488E623A467ED2EA0432A312445E28654898528B55CD1C8A8172B418721E041B134FC21484B48172429C6612B468E852A032AC25547838F13
+:80C6000082A4664AAA2A9AC52166B2423169418748A82E5C2813B524B283D842B661041B984CE4419A148F49F344446AE24439C24A086F5E01800122482A012200B02228918248A81288848815089628048001809211802144012A113128199418488501458204408584A24900850428A0242F27064F41F114148D24AD4CDF74F65777EF78
+:80C68000C47264FC5C768F4AF212B2AFAAF9FAD82D88EF89FBD8EAAF8AD889F8D1DAAFBCF85A5A8F99F9B1AC25F82828477A7D178F917C49A1661B8A1B5BAAEE3FF712532B551F17F33838CF99FD984983F511195E192AF32FBB3F16374113E259F8D8DC7AF2D8D8C784CF8EEF4FDA88F43C7C1AA5ADCFB6034F41F15454CD36CF62F44D7F
+:80C700004F7F77B522F36C3C4FE6F72CBC6F4AFB38388FC4D782F98E9A6FA6F62F299DC81FBDFDCA8B2F25F5F2F11FCAEFA4F52B294F7CFC7737FF91FD69696AB4F1EA1FACCEBEF3AF16B762F539713AF3B4B18F9FFD79617E187E298FE4F3E1E73F5EBA71B721F21491CFC4B434F65C788FC3F678E84BDDC5F87E345AA7DF8E9DA0333AAD
+:80C78000F714262D2E9F34F6173F6F47F2743C4F67E74FF77ABC8F87F6587A8FA9F15C9ABFB6F6272557589F35FD422B3F1BBF12F1F9B58B368F86F62DCB7F31F5387957526E611F18EE1AAEAEEEE23FB7B753A7621F13B3B4FBDDF44E681F11F749311F22F3AFB83F5EEF13B711F391819F8DF974F4CFCFF9ECE84BFE8FCFFDA8C8EFCB23
+:80C80000AFCEEAFF6D1FA0313AF71C36CF66F2496B7FF3B352F37C1C4FE7F73CBCAFEDFFFAD8CFA5F4981ACFA5F9DFEF77525FDCF45DD52FB6F2FBF92B779F5BFF6862BF96F62DEB7F76F7BF695F56E414F6B1E1BAAEEE1F2EFA636B3B772AF23131CF8BFBBDD41F97A2579F16F26D7E7F7EFFA1E17E611B215F18F88DCC4F47AFF34F47B7
+:80C88000BF74FFFCFCCF4AFE7CF4AAAEBEAF2D042A010045024184800484400811448444A02480122114C224902800002A28840149014B124800A0482001001A8462894482890228F0BE3DB084819218CC726A6241A021E0C1021A12281128431141024E2119A4B490282084E144F221485222422C9121A0212280082AB1112466412382BF
+:80C9000044015C014CA242B014048C84C341CBC7C0521F41F228121F4132681F41B66AD141F24A121D24AF26B911F24A9251AF143934AF143B24AF147B24D81AF9B4488F14F9244A1CF8244A16F1245A96E1A2E459C25ADE24ACF591242E421F49F228131FC97248F1916CEF14F1816CEF24D1C1B24AB981B64A9945AF44B934B44ABB249E
+:80C98000B4427924D842F924484AFB244ABFFC04241F41F628121F4136281E64AB1215F44A121D248F62D941D2288BD2483924ADB143D212BB2594922B484E256D121CFA25CA125F222CF9214A4CD2A1EC5CC24A9E2C2E431F48C6421749421F4836468AF6461128AD951D64AB3449F442154B42A9BA24B44A69832D946F82E444F3845A1D
+:80CA00007F190B0000000000400400000000100200000000140084002002000011000000000000C0270044384B128C41C933A012D081321812A0142A5C2848842823348480422882812282276142CCA8B48022210280A3821B21478218B042081348728428C9284028A1124149F2AD6F6042860240821102C42829E12812D8485141259919
+:80CA8000818117484C34852A44C8441B48A9A4241014A486482290242924029021172400584DE129A1128485B441A12444241AE64A84344C871346F83575106424B0140225E13102C1F0261189322A43C1438332814817884D621F4894A4846B2193E888222592241E64884C1668178582A6162830214E22282A91644B3443A1A126C88CFC
+:80CB0000248B824B1885A216CE2424CB14225E24EF9E0A22442A0189618121A01228819218844CB181542884440048802494422800A025E04882C824000030118811893181258204114E1149042240A814228D1484FFB20B40D42201008901209198193448D048014A31258542482162144578481182021E2121005024C05240421408222B
+:80CB80004800A028002C48C8A448008B84A084246FC246C2241280F2324215021F2224F1228630224014D22864822D4A4B42646694141A823222481E4841A9C42CA381324422488AA212260C3F4483D642E188922486DD22661483DC5818EC486181928E6C4A92244DE816C8242F2A0C6116446222722583218621F81882488124490166BB
+:80CC0000581AC1211426C451C49C32428C048F13342284224228482A24618241278490164A0894B041C2C859586885F414885A984848882AACC126B241062224180010185122361432214241818934122E442946FC224418222682041A5224402E014164602928450253A3422889C224433862290884881A28022E8428665C848141EF1906
+:80CC8000021C012C028416119129846C52C1A38152624528144401284309847B842118809518008561848C028922748128415861281884C42A11240AA741828344469164849014843BED40384216658149D22202605100B042538124222301A99812B04403A9028CE1882402128CD414524288004AC122A02481163424203288CB61C098D3
+:80CD0000281622A1142A8101290644150120011C02002C011220220820C1481822642200902C004430482081391222604241890288008041816884210088C041004088E4CC083C81F111243D18C12F314271211823137232E22154784582654511212CE349B2444118342E80946416B84811D82CD148318822303449C2388B2415381436C6
+:80CD800014F824188CBA183AC8A9588298ABC14721124E34844AD28441E459090080220220911C44854588088122A1128DA24120021F8A0484898801202422BC224128028D830086342200C0114820C11400484A0200218CD41B0D502424201292122D12812784282308236484AF28042D12682911021002002C84215124502240022422F6
+:80CE0000482280A62180614A488941A481984227414A93141280085FD6030084812117818B24913081C0242302211D2483182C9141128C2258218400820000442250A444400C81402482828158221821B0222194828244102AF4A54C800440688283222122642222D01824044280322C8C2602100881009088A182228428442A8402814535
+:80CE80000823C14444202288188481088028188464484F3B41522114141C4211440110C841110022A0420082828821228800281002848424448890481AC2822C02822B81D82324080028A012242C022A2442F2FD76A02C100A183028182901244004C8888091128180A11824812100902480024100141088C22441410088581008222098E4
+:80CF00001838448021F495D400446021000028004410181808448001A121230980242201424C4431214058840081202284128602C11604822E988026248A0921CED4000010880148C044428004008894422812261182228809808281423824508400004420A828004A3122986021000060812100E30A450200482880A2422800440010288C
+:80CF8000120421821008A98282342845486412501422C02881184440049AA442006088401404100418A2416FA84B4389C2422800484001412645C12841004028280A218240820C4042184499884008C82240622446522486024480C2840022822C24A22423048D646014675885420185B81867242F14E6283441D091A244C81F64BCA8186C
+:80D00000E841A252BEA222A0218318A82420A11165986844518942F42A44883AE1487228F68262414F64E942AB518A0B4D884B882B988A84ACBC4D962F42A284EAA8448F144F93622C12117A536A1317A42E3126FA28254F227223734456A8265288A44F127362F289A8218A6128218812482AB8227384861442F82AA4274223588525D8B7
+:80D080008C44588266F4C2923AF654422B8226D28C7188C6143E228F21EB62A14123DDA4E841D72846F4B28E502550823E2A8B224D322216886184488A820487C48A8264E1CD585682D1988AF9A98A257AA20A4A56288782874257CAEB22944141288B2228C39224413E64233882CE242B449E821A211164421A62822AA61922184D825FD8
+:80D10000620A000040124132112C48C882C08240023482344001140020048221822182232238268220080030244840584210022184148440087F2E045F4656559FB2F219119F15371AAF84F43839AD41EF48F68F298F84EC5EB886F84A643BE62F1AFAB5B57F9DE911F9B3919D899F9BFBB8A92F9AEAAA9122688F8958A84FCEFE81828E6E
+:80D18000AA86E62AEA2AFAE5A78AE288AEB94F22F28286AEA4CAF566246E722B268FA3516CE06BFB9ADA2CF788DAA5EC25FC68788BFA8B44AFE94CF345475FF6F62B2BAF81F548683F12F34B598F92F24A41FF5C768EFC6BE93F18BE867842FCC388AF18B8BCFBD6D88F9BFFB391AF89F9B8B88F9AEA9AEAAB99622EC2AFABF9AAAEF06CDF
+:80D200006F4FEA7AA8FA2C2E2E221F7AFEA8288F82F2383EAFEA7A42F2E6B26F6EFDF6E22F4CE924F62AA2CD1A9EB22F6BFB3ADA2E52EE926F24FA4EEAAF86B4F8F95E56FF4748F222267D4595FB393BBF35F53B23B5F3183A3F23D266FC4367EE628F24DE2EF4CAC63F2EFEAAAB4FE37156F2F9BAAF99F9AAA89AF929BA3F28F828822B15
+:80D28000244E62AFA1F1828A6FC656BA6F6AD2EAFA262E2F22F2874729A83185F22E222F4CEC4DADFC4F46EE67BFA2F698386FC9E829F8B2B48F8FBB42F342427F6CF19E982B764E588CE5774AE374F42C66A5FA7B399F34F43A32AF27F7586ABFA7F26FEF2F64F4E363BFA47C4EFACACEBFAAFAAAAB57F36F67F2F9BAAF99F8B9B99AF9E3
+:80D30000A9AA3FA8F83A8A29E62AF6BABA2FE25246AFEEFEA226AFA2FA262E6F6A7A83D78AB838F3ACAE6F6AFA42446F6AF9E2F24F27B6B2ED2FF792B8ED984F43E96AFBFA982BBEAFAFFB76B26BB1AF8EECADFDC49E4FE10D00250126012AC148228C2422088A048C0416882281221908810090284908881004222002418443A2412A2807
+:80D3800029A2482009924C228122099228828FAE0247180084A9012110022B84501A10229822412B14269892126022004224C01250A48B2826A22826624840A88282250266C2242001450880084E824128489044BFAF012CF4112485F21124C7241F41724AF31124AF34D141F24A9319F24A9251AF243924AF74B924F4429347822D914FEE
+:80D4000082C4914FA2C4814FA264154FA264192E4A96D5A2E449F2224A1F49F226421F49522E1F4932481F49324A1F48B26ED141F24A9219F64A9255F84A9643F24A9243F24294478229F924484CF9244A8FEA0B2E4A1F41F628421F4112FC116487141F41724EF181244E151F88F24A341B288B14418DB54B422F147924D81AF926481CF1
+:80D48000FB86581CF324CA5E214FA268112ECA5E259CEC41E292FC112C4BC21AD43CFC11248B941F41B24AF88124EB1619D26AD941E6249B218F6439244E924B424E9443B24239262D944F22758D0E84000000000000280000000000188008002044410400000000002002000000200825014F4103512D324181001C61211E211811848AD1
+:80D5000041028372A28C219482200426084902A0288444418830228092122C62822E843C0581C018814241122C4F8421A1C284C028A8BFE202484718831162218D112422902C2110A814811112C18434482A3848C04881E344412A13A1166481800228904100225B824981A882208918A881224141484B125C08C7AD504146532881701204
+:80D580006111382D314D1245416882588489B28E41C8422C48220E324668E848E088125A411F4116542A898222B62241E21482CA434085919C8328C214188B4286A41243B1444A2AD31438B25FE90A2CE441921480414802C0280098101281321481114230488420524811A012008200008012488481B22848042842828892290100424187
+:80D6000089023F4F0A80120481842140028044412814D1123821508444501820944610020040240218001150412C912149080020014026089088008AF46A7D903534847042C6116C0144472116D18241824169C1C4E979119451111800441038444C991620831474143147226189D24285F2C124128B2465C23160A18662148E5262148937
+:80D6800032944C93188B21227F51011524124A4298122901412D1412895421166814908427C253B14801181430444954284964492120818462214C81128422C124EE1423811242018100D24A120386C42C8C412874960A32114430449141210025230140D8C151921909454105840021009014201244544146012115D842141131214F8822
+:80D7000044B422011823D9120461828322A18120A3822FC208222A44140A0041680043224391142004430249412451C2824342A8128082611480448B24D541D218624282B02204450A88C28842257824280246A8412084F485C9109244A30200874216612124863814839A8484412608D048418829125282CA21034C21018333B125142C16
+:80D7800022542240081A02800725418414942418478800210024DF21094A11024116452415180628008100252491112260844842488448101B1808848C223211250418D01C41143C61B08801814100244AC1180060C1F0638FA04243D2C21266414489D2B4D12445628A20D148381C44C322816183C14D58188536C84E24841A721E618186
+:80D800001638288728C3722431717023668126184116942145FA188290884C84544289F1422818463812A0412CF46E21D022014048014B142002A0218918013042C0254118824A8204845A022002581A820425624190214196AC128C26A461308142824426C8244319084221A5045FA6084246044914084A1108182304C094433488141DD1
+:80D880008819C48824928E2840028C223422230C4C3218192928181198220092400CA82412442D1480048428412200FF8F07320020644220A252448001101281018C18810411848C1525418804221CC42400002E148524A124E0140380410142424A02522816A4845022F0267340024502181018842268418458C01849D1E21494126460F0
+:80D900004C48883448151C821134118210484484051B81884CC1448AE1488482040000182842848121812678860F0048186021801402812E82A0182221281820E81318A121248824281860284110C242112C6C489220348186C8442048242244411184089880419882415FE8018E1424244582528252161804248091446094183C44529462
+:80D9800042001C21628400201421C2281604172290238D421F4146841628420419A2411848414924921880432482F81AD9400200441100124F2481016512C1181008841880012364141B18884430124C12224102201288010000802221C8844422224341648110429422D77D10022041F82452902424302800104424684818424C01C4C0BB
+:80DA0000844414842E542410C48600804134248035111111280014488084A1849024448148C1DF8804481441A03423446424424A0A60464246A21424524E824221418886180210124284C1920070221414122208851584A88188180082182684880822601A886FE34B421C840444108811042662CA002190428022A1281374131295242402
+:80DA8000881024011150C24115081C4C521428282238301244E0116211100210012821F0493D9016330869745C7E43324A4F8715F28414AD682B895823782E58814B552F249C118F48B58168418BA19FA8C4A53745C78283F4222456D626E122BB12731892842D841EE19EA86F16F214B44953418D31CCAA298A41120145246748BAF28C01
+:80DB000068124E2E8147B28D249F464FE226C442C0122AB32C0189F264442F21EA630127461F64285528BD888E1816F855885A96D417321A38498E4A3C11A41548157485648ACC41F5C4222D14C18FC1F8C2412E44CF97E5463C814CB812C4314AF845D41B944C36544A84D1D892142AC2E188AF2501165444456641481E644F8145A631F9
+:80DB80004A048FA232144B516CF5D655267215F5CAE225B32671C3F1845865F1A64245912327A14D426B983E2146516C6F1418722151243F72C112115E818A3A154B52222EA413A35116E31114B42297941AB824215B8682678A1FEB074A02008A044880D4240888482C88C4812A44A542142242A22022240222C221008230813081B08179
+:80DC0000048E48002008488004482048810448F0AB44C0263F7452622F61F41E2C7F13761A546C2B124F4ABF9CA1988E841F78BD8AF93EF7BF93F325241F8BF9A46F26F1A5451D311F3E762EF66E4E2D22CFC2B2B4E92FFD17B59EB22F437B18D256F8A6A53F15FA89A6AFB9EF5FBF21FAECEDDFDBFB9DBD8FE8923238CEC625F242514FD3
+:80DC800022B166F5B4144F42712CA842CFC6F66444CF8EF69848F044267D6D2465F4AC2CFFD7D64A7414F632726F4BFF98948E98C85F59FD38F27F61FD1E5D6F72F2B399DFC4FE45647F56F7ED5C9FA5DE7BF6EDFE6F63F11E3E4F6DB2F2FEB1911F2BFB36B49FE1F18B8D7F4AFAB5EC8E83FFF9F3F3F45F5BFFCDFCDFDDF399AD8FE8F25B
+:80DD000086141AE12FFF96C66F44D764F746544F4EF1B818CFC3F22868EFC67428F8BE3CDE172427223F524432123AF63177CF61F12E362F42F1F4F6AFC1A199A81F7CDC6AF9DFD66FF17924F594FC7FE1F7D7347F54FC351D8FA4F7CE26FFF47C27DECEB294F7E1C73F51FBA4B5BEBE8F6159E27F6ADA23E67AFAAA3A3BCC1B37CED59FB7
+:80DD8000DBFF9595BEA62F41A122CA2EA45566B276F594D44FC37324784CFCAEECC7C2CF88FB5572E026742F55646741CFC6F67F7FEFE4F4363E2F27F7F6F6AF89E189FB42427F7CFC7E5E6FFCFD76FE7F62F8C7FE6FF4F466D55F57F55DFD8FA4F56AC6FFF7FC1F3FEFE1F176567F7EFEB7972F3AFBB6BE8FE1D9F2F8A2A7EF63FAB7A680
+:80DE0000EFF3F3F6F55F57FFC1D45F5FE74BEA6BFAB2B43AF3D1F1DEC44F47E526F676544F4DFDB8B8DFC27248F8ACEC8FA6F6ACBCFF250729010018842A4108122642081A44E28104160892301110111803219012A01290143026A012B022014B1212148422402149052812002880028F130A244465024582448294121E4421C01241208E
+:80DE8000582849D422C8484282D084A484844028140463022D8A4426421446084C04CC049E2400184829B814048A9438C0148028F87556E022F4112485F2112483F41164A3D441F64E121D64AB9419F64A9259B44AB925F44AB15B422F54FB25482F14FBA4481CFB244A4EA14FA2E415F2245ADE212E4ADE252D4ADE24ACF4D1243CFC91A4
+:80DF0000248D831F49F248811F49F64A811FC8B64AF98164AF249961AB9459B44AB9A4B44AB9A4B442F9A4482B944F82A4944FAAD4350926EA41D638F4112483E641744ED141B62A91418D9419D64A9B658D915B42AF44BB2194B25F82E4447BA6E854F3265A4EB14FA2E854FA241ADE251F82E45D42EB5D42EAC5C28B1E648DC31E248F24
+:80DF800014E841D612D8C1F64A921FC8F648961F48F648B25B68AF24B9A49418AAF442944F8AB44AE18AF44A944FAAF56D1A4028081400000000800200000000800100000014000000000000402484020000220014F08173802413181229F34C226081421648029042244641028934843014106122144CE14861210030428E112308354201
+:80E00000B442820A482002818921981842C3E88411A82828488644F8DE3FD0426128444D9241D012D12401C52288815442478141854294141E244A514826410E2073428212F624122A7132C41426B445B222280285C6156822521288222C98194C981CC021CA42C8844116C1242F250B43210E4959182E121D7869618143949C162256423A
+:80E0800044448110326C4F211494148502AA31121E424B82165442222B212751CD116E83CE22222127441E84286812324181328D9143795488F848112E88A66828449631149F260E2924512E1006411042180200AB14704213C4141288841C1244011C122611A221294184A4286140417428922142200488288D821008852422044C8244A1
+:80E1000064823FC70D2200284110C26C27221A0400001280C4A241442004422682024E242A84F2244812187024020000904122408212420848444825A448308428825FEA0841181E24A5D218C11C5606844581A212149662244B8441641364241304111059821374221A59823721B08692242614032D242C2A8232141252C68C2D29552440
+:80E180004328D8283A182A0528904C26F8AB27400426145A5A44584B248446242241819142183044299444230442904822682632482722122684E14122824242240210A4144249A4418A3142812148CC22E44204806884A23FCC0122181228181658422578229211200282244B4841E012184205144051A214A126354826C34A4B28405639
+:80E2000061808238222812142A918886228211C484828827A1184A2812942481BD2924222C44810215A8421214A0826110471418182288619810344A2F8952421200F08222854524518446A124CC12CE24B04402400211244849612143A1144034124C06222FFB0448690484A33426441421444A81D442830819E24214044149220421B02E
+:80E280008901181C04441C22822292184E148062848C86114188248883044028048A345830125624F96485002218290110518256A814111E2842818C7412028991188C82C1AC121C42048322128611A81418821E4224204102448247812A911832841A3818208A3824006800847E8DE022942416F1221246382E5C54A38981611F252255BA
+:80E30000C2481D186F8214BC1868821F8AD18492148D2343525289013112A5922828821A26B1143218A146986C5E2459C13818237938A1581698141A98422E4482442B21433544A6D89D082110420811221246C144E081061358682224123014448A0448894888A21246048E244965412A41D4320443C22463028884C0482240820426C89E
+:80E380009412421E48422218F02EE42460412146A221444A524821428422C04284207228343226023024C0224C8804237142924426C22C44442D448C01224800C04812002011222128618230442A04841F810815240410284424A1412B181B81C09812B02411028554858E42163898151844186888821628EA812418222A3282874182A56C
+:80E40000A448A14084024820082149228211820245083FF24B211402122D42361A982A7022E3244281044218C9164802382245A2242522143224001214124D3825024D2860444004262481812D2298141845820250688C1CE481C824A7381001AD4244004C22C128121110223D8481186044009A2402410048800A123041848840468888CB
+:80E4800042014187481400A04829E24411E4449822184084F1B5486028C01A8418C01800481200C042418C8182014C1404430210B42424014384542860446844004220022844214A0120A885920043A121812845F8924714400180944430441826058041848102232512044AA21400002988624224444881006229062210A441818001805C
+:80E500004C41028634282C0210025B4F001241302C1842404402268848C88842481420C98814002518A1841181902181298104100228258424081842488A12111484022840082B38004F8E0900181C41561824200228182D4410944241210049018004502410022480240220414224C2144442284A8A88D8822C84948480C8840049888A93
+:80E58000F1FFDD00C044412032124A924640584A848B282181214614229222822F28041845820840064C48B51198228490E21440A82436CC41814084814284040012803412286FFA0A426B488D1C2B414724550A4D184FA6B68191128F3282B1CCF18C824F22F424222FC47428B428A2738B14CE22A144CF549844CD4416382A4D24E5B504
+:80E6000042B51502242B126F8268424F8C624686BC24C2411AB34324B4C1B11489B824DC42A3214B631AF2E2324D884FC8D2A8F13ED414357111024D162F4272487438722AF212142F31F4212116D842C8884C754AB858F4283149D145F8C4882B228BD32CD22202E01E3A224D2423E48164E28FF4FC262A6B4C4B24281B2422121962C5A6
+:80E680004F43B18C2CA15A814666612F28B2943CA485526A1E44EAA1114CF2FACF5024186721918F81B532F7467C5E64E046F2984A218F8DE4217442E841D3C251242B612D1225F494C145B465548425724A562298CE122ED36E92CB812B124CAC228FE1C816ED822D444DCA4386F5482866AC98A829A8485B4C5E14224CE8C8F8241884E6
+:80E700004CB6283834DF2804000040020049082C08002C022484148446454841484168142568182528981282200882A11B48811110011B483081002008820020084FBD4651475F75F11E1EFFD1F51A38DFD1B236F21E14CF81F11D9B7F1AABBA29F18494CF8DFD3818EF43D3D9526EF5B293F998DC9F19F91F263B22C55E5D9F12F22737AC
+:80E780008FAAF8C9C9EE663AFB1C8EEF4EEE24F4C21AEDAE4F48FE252D5FD3B3C8CE2945F531372B951F32F25BD94B111F31F136166F417934F4148623F25E18CFC7F73CBCAFA2D22D4651575F71751CFE1F1FEFC5F16D3F6FC2F22434CF87F77FF8FFD9FB82B8AF46F79494CF4DEF61F3465C8FE4547FFF6BFBBBF8BFDBFFB9B5DF21F33C
+:80E800002D2A9FF8D939B46AF6AEBE87E2FFDDEE3FF674F64F64FC848EEEE22F2AD7AEF88C8E5F9EFEF5BD975447D2141F31F857D52E22AFCEFA81918AFB36B62F41F934248FA9FA3A3AEFA5F176348FCBF9382A2B47141F71F113576F61711FFF1A1EBFD1F112346F61B356F39735BFF9E122B292FB8496EFADF51A1CEFE7F23B3D6FE323
+:80E88000F196B18FC9F9F7D54F89FD247785DA75D8C6F46464CFE37337F3E412AFF4FF12389E7E4FE4E66CFC32722729BF9AAAEC8B35DF5EEE82F315341E3E3F5FEB26FA5AF84B111F31F932122BB84B934FA3792AFA5A28AF86FE38B88F22F3EF51141F71F111171E167F71F17E3EFF72F342266F61F356547F5FF79B1FAFA2B2D6FB94F4
+:80E9000096EFEFFD7A3EEFE4F46A6E3FF3F3B6972F4FFF6CDC5FD9F9247345F21C8E7D4F7F54F43436BFFBF8F676EFE5FF5E7EEFEFF7E4E64E642F21F3BA2A3F32B262F6F9B187444FC3F17D3C9FFAFBF2F4EEE2FF9CFA9591FE922F2ABB82BBB4F9B89AAFA3F25A682BEE8F8AFA283ABFFC0969012901418CB424412802221648E2880432
+:80E980001244846C0244924A0228200444A02422200243022A0122482248229628A248A041249220D9480285248802DFC20886016041214C724262414E1213412201478181482F240218C0B44800442542642290145269052D58442D42442C41044C024449810480118498442850284128488D1445E1FA0C2CF4112485F2112C87241F41CF
+:80EA0000324A1D24AB141FC8F24A921B68AF1419F54A9243F24AB343F24A914F82F44A914F82D418F9244A8F14F8244A87154FA274D8F122CA87592DCA9E242DDA1F49C2C21F49D228F8912CAF24F8916CAB841FC8B24AF18124AB941B68AF2419B54A39B4AB944B4A2B944F8B94924F8A84F9A44A7FCC0FACE441C6431E2C87341E2487EA
+:80EA8000141D242B141D28AD16688F549325AF2419F448B343F248914B42AF1439268D956F22F548914F227C58B1247858B1227418D512C4242D5B1FC1C24A1F4186E4C152221E6C4AE1C8F24A128E248D968E648F24D384B24839B4AB844B4A2B144F8B94826F8A94124FAAF51ADA40081800000000440000002200001400880000400139
+:80EB00004008000000004004280000000081F084DA403211144C4111C27322445602A11C91924889128202214C82022440544A4244295142472422984840828181514219628224222C1428714428F12488884508004608F0331A146714A2AC022AE442115E14871425A4412242C14D18133518C3C1441335525311384485822632141242DB
+:80EB80002C0124839212644D11702612B418C2524D1216188828821CD22444C2442224C9A718436299F04F3424423B249121190433372347A446F61442281F22B48491188B2427812248486727446041212D66458879142285714502A98A15F4421923E16142963C1A64828C113284A3A21AC3C4548C9A4285042E4C8E1287428A61215D0E
+:80EC000024501412221664221E24C14414124088416844130147816413011313881408284904244421282C014044021860321614C2284260244012C484222412801408EFBF064D114429014088110184181062810029030060824284408A420A8444244C02000040012011240160148200400884288444F048F740028816D12254241485A8
+:80EC8000321445022215882401845624A1411242C024230487244446A22483242211D442C414284C93864332141722E082E4489281188C3914DD124344E849A4822A5484131C48F45BB750618068314825381215C2144421109A1800844E14008022441442C22264304241221224444381C21282114111184C4614011B8188191144C8444E
+:80ED0000822226048544F4D8282041941200441484102821128184012B1280A114184608262844C84884488C628424491284049024444C22612240A892881883C414458A049628C24884178C007F8B02859654858412082E1418212524B224289249488A01181048384A8442260C4160821284421E448B24412084912448441E444302E024
+:80ED8000481128D18601441E48B0824408231404BFAC45B228C442901A2210688816082D18A48743188423A242421044152215084D992100831441512A822E1385E424423218818110188142040018AA4134442052122184845F2B48212102901245028644810140512200C47014888301205822608258214469342800A02400602100E059
+:80EE00008104484A02118184881281421144181049E146F11422C1A7231A12D48471146A81298171A80216CA482AC9440045D84911288158C23598265829B218D41234284721839A254384622149522885241144081281183D1C8CA182D86C21E88412125484F0D4F9502200100823021444A3028D1319440289A2418D14328034488C84A5
+:80EE8000121408814185C44283842431221062814A0143C4284E11284A88060047818584344800481884CB1B400400421E284130182001008146043448800441480018481846945681382A9458903880054A0320012A044841E042C8248022218202286FB3083A448C822401223684421488218481C11141901C87122AD11815480150181A
+:80EF0000140026828414081914814234414048140811288484818100004E821832F0E2FF00401882014082042324042400210000152441082C028100000000482420022180040012003068442384088882F071F5408884961C84C1A304282022321A4442141A020010024B2141C4C034608228002C414442C454280046841342C4940020CB
+:80EF800004298882B82C21131812FC175660241048C128484800148C0489014249042119044C0400002A14018034220068008042212424384882482810C4148288A018203814A2F0A12460C14100481116140400009112301843C1142021840400800441444220024A022820042A2102908242214048981C82200600385F470400444362DD
+:80F0000048430128448041084C9124504111845D188147821D2619C228261424D24826048183C4484001142001810081141044882484346866184898288C14E84E018286018480041444001400002400100142102121020000C424112C9221414160424141400130182441430200141840015B2D40084984912428120041C04C80420400E3
+:80F080002902002B2180031D84441F44C212A0121C524164CC4186142102228041084E14800248C0488143182E781A42F23E9C50448A3428718CF835484C25F3244815C4281386D441C1184C545845D112C4394F9417E234E454312426A4628B444658286A34224E4C2CA2441D12701504724E444D648A81011B44205148E1A6CC184C0827
+:80F100009BA8CAB128E8193328AFDB082A75811CC43C49C33647861D265024895128857814C24447144B1121C304E044F42C2481104CD554E212C224E08425A24115A4441F4282F22664196222224D268CD48DE84928421844C4C2C74885BAE87C6438288E188D4127C1EF81085612C42C8B418F47344812411E24A0451E481A11387417C7
+:80F180002126D221E1C1132D713DA9111B229C82931F13D344B544D566932889736CD986F326216D592392111C8473582832587022A165E945E884B54CA2E66AC6381E142FC1BA16E282C822EFF602280022480018A012482200001302112811281144150884121528452801121412204121010040010080044800A048A048F09E7E145E5B
+:80F20000623F9452441D45474E57515AF625351E141F11A1269F1282F115155E544B26CF827326F746648F82F265664B448B616FC2762DFC2D2D4FC5F578F88F83F11C4E6D568D18CFC5F124266F66F546776B3575F534545AD544F41414CFC808346B8856F21A14C5F21E18AABAD8038F85F54D56EDDECFC6E486FD5A4A6F9345F15466AC
+:80F280007D65C7C25D15CF867355AD655F52A3135F53F164649F12D2C8D355D14453418D1A2F63F1567CCFC3F37474BF84F41C444FC3F724245F1AFA646C9F96FE34344F65D466F52B39CFC7F7747FEFE4F746767F11F7171547421F16F6747445F49CBC8548FA424416F23A3885B25AB768E285E78AFA7878CFE4F486CCEFC6F6B8A88FEC
+:80F30000A2F13E49146E423F12F42C2CDFD2F26C4CDFD3A1665F57E642F325258FC57151A131DFD1F144544F55F41D1F67727F55F768495F57F56E799F17E596F721215F52FA2D255F96E613D664D7EEF21221CFC2F23C3E3FC2F457477F72F617115F12B241F664648FC3F3E8EC8B119F3CFCC3E47E32AB31C5B652B5C4B8DCA9AE8F87C7
+:80F38000F548EEEFC5FB2ECC8D988FA8F9FC2B144F667423D54CF23D35CFCEF7757D7AF77165385D258FC7F77969CF81F11D1D4F427111F5393B37727F55F76D4D5F57F16D7DDF53F7257DDFD2F22585DF56F4F579CFD7F66476EFA6F21221CFC3F32D2E3FD4F677677F73535717121B754F475788CFCDFF18181FB4F443613E32AB31C5B5
+:80F40000F67E5CCF86F258788F8EFE78788FF9FBFEBCCFCAFFF8F88FA858AB800140884128024120420884804404008D246044400442002004202214062302002216080012004088628828124C0228F03C5C00002084828104202401A014C011112B14844E11C01111202214042E424422C0484CE2121401446220C44483A44846811218EF
+:80F4800024348442A08480288128F89C35D022F4112485F21124A7241F41764AF2112CAF24F1116CAF269961AF249945AF247924F84A9143F2429147822DB14F82D418F9244A8D854FA27418F1265A871D2E5A8759ACE549C25A1F49C2521F49D228F19124AF24F19124AF24F18124EB141F41B24A9921AB9459F44A924B42AF24B924F4E2
+:80F500004294478A29F9A448984FA2F4871D7026F91164EF1224714EB3117644E3C17662F3114CAF72D841F44AB3688F747924B8427B24D842DB8494B26D48A9CB528DB4C88DA46D528B2C2E1287584D538E24BCE5C8C25A1F4896588E24EF34B181F248121D64CD921AF64A961D248F24BB15F648924B43AD924B43AF6438A48B146B4A2D
+:80F58000AF44F1A4521F18018A240800000000000000000000800188000040011884000000000000280000000014F0E34C002220814121341448AB411440111C98821211221884130415121401372214C28503E04443C4214014449A2860424894CE19123911081812C08216088061424772E012B486511284E71285541421260121233150
+:80F600008223645184281246084E2410848442048B144C9214254424041A6441274238224A81742422D46881483248248864C9F288268161282246C42546F8A1ADC042D60481AD14809414502A51213B82CCD4A58188C1112812458A14C441218E15F0124135245D1C15044CA1145D224E281A92248314C2244E24C494D97918E21201605D
+:80F6800083CB8270822461224364131AB61B0F26815212122651C1450366A14120410240880283044A1201C02400268852241022A4424418444180C16824E0242168244824864816C412842426084054847301002D1150124042180A2440031800400140084800D02324010000000028C50200201148081124C082C014008048F85491C024
+:80F700004212812D1140914143614121501881441001263442490143044048098111241223C6142081220245812682B426F81242248223C212004F81C248448E48288481122CF6F4CD806421191113413141A11221405181001120121204488004403241211022C614002800224C122224288591822782120027818C18B284048181888DAB
+:80F7800042D50B248C442811029014E14042C826411800411C84415284008C51814068118051120089014A021594482870220621450824130226841464812210222172ED0A2820425182221280031142D094115812122C2292182034214CC2420000622508298412148401101282420385044E119088814321C2428218404848FA94ED24F2
+:80F8000049411441042501121185122802001241891109A9041830288419048301100216880200A302811004000018502281848420014901DF5208110084108814481822611131211018484114441414180828644400414A22012D420060410048781321044048A44120014884498801E0E145231194215508A7121A3418AC0183B1411297
+:80F88000521E81A711818D125D28814D4860838CC22289924444844E2290621289B3444204244783408874646111C1204458488C2531188182E041C81812F0124970240100A1006012842521412101C0141302431192441441830414211250482442241022015022202211820413019224412982344A16085048845FC10510110414001247
+:80F90000008502000018008418110000008100210000104A04204208009012100200000081229FE30B11001721106111100111C011259119210084440048100460C14181C024000012142443135612272130922100210084109C124412007787100140022081015029C0112111211800841021044400814048C22500001214242A5142507C
+:80F980008221291802702202000023111442084F8C0F85B849E444E4144141410111504445B424E212B2280100844116522225A2111A210943518400154111518885F848424E4843440427121820514445B436A2220084504840921225A2139FEF0E00240000000000814002000000000000000000000070120414A124008485020000006B
+:80FA000000F0AB6A10C848424800000054514C22820200005022901216949482880000111484818C24841402182210411644848202812001400229F196512484804411420410084044C821110020010021800188104408111C424242888144014011021041458202008420021002BF9603904200001001114480028400810010024901883D
+:80FA800000004001C028242A44024002004004280000000021C014DFD7032001001001110040010000000010044411440000000060230018002400000000000000B02B04A18B4420041400004554444B2226712801400C40522225A2111A2129280800112811851AB84824A51410020050444534244822128141002440A2114FB60F5088B6
+:80FB00004C8414021100100155B44882020000002421111A818818021240D111021285984448002C014002D0C4828202100800212512F2C66A801102000014400110080081000040044922420800004022021200282400001481001C042100200841446FFC0300100200000091240018000000000000410028240024001002801212434291
+:80FB8000028542080020020070C906230144140040011100157848589924818100000000004420012228234282C11427212C42427122512200101A384140588812800840F417AE00124002411511414801911435010045280100414554544059241008282C0224233122260230140040513214401A02A141800200418F614E42124212129D
+:80FC000012014001154111088001000000207224041004004082021212142129F112122C42582311A1A442811800200210048FCE0C6F22F212222E122B111221C0132592822F31F111119B98D659888F18F44848421F945411488558884F84F448444F42B444F22424222E2480524445E642F226222F21E222B112A1812B99C0932592828D
+:80FC80001E111F11B189E999F848888B488F8424E48404488558884F84F4F1CFF0262265A2121A212101502229C8131F3191C19E8887818D414A2444511148155988688F44544C4B242A220280425444286F22D226A2123AA1812328082592823CF1131119EC897818B888A444420048848588F6C5B400000000004842282200000080228D
+:80FD000002000000000000000000000000000000000000EF6E09000000008024842202002222220000000000000042422084A4444A2404004242000000000000E0F70400002002004842282A82220200220020020000480048208424240400004A0442000000000000006F220B0000282200802484022800000022222200000042004A0462
+:80FD800080044200A0440000000000000000F09854000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000002097
+:80FE0000024842000022000000000000484A840400000000808424848404000000000000AF910F0000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E0900000000802484220200000028220000000000000000B9
+:80FE800000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248467
+:80FF000022020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE960000000000484228220000008022020000000000000000000000000006
+:80FF80000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000801C
:020000040001F9
-:800000008C024008001012021E1488884400404101165888A044000000844485042A220184000021211797208141040012000081200442008C14180810040044408801000000822880010000004200000000F09E95000012000000004008180000004420820281480000008081090000848100008148000000009F3C0220011A011200001C
-:800080001008E08424A444B0483448815088C14120528841842242000020818182A111008489048490481800000000DF860C12180028802102000087848011588416480881402452848982C244281A02002001200812200240088187848448848412220000177100E0410190141200005088108844180848841044486C4250440000000020
-:800100001AA11812008410180800206484899488802408003FA9086F22B212A2122B11122B11C0122582E831F111118B989E898F84F888418F8424F4414911489558884B444E444F42B444F22424222E24805244412AF226222B212AB192A1812B99828E922582E8B1F111118AE999F848888B484E48424E4880548885E884F4B4A1F0265C
-:800180002245A2123A211102502229C8111B1119E8897818F888414A24445911405888488FC454444B246A224204405444282F22C2822AA1131AB88228082512C2111B1119E8897818B888A44C4200405888487F9D080000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000C9
-:8002000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000020
-:80028000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000A0
-:800300000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000001F
-:8003800000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000009F
-:80040000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000001E
-:800480000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00009E
-:8005000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE1D
-:80058000000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F0EA
-:800600004FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000000000000000000C
-:8006800000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000000000000000009C
-:80070000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000001B
-:800780000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000000009B
-:8008000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000000000000000000001A
-:80088000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000009A
-:800900000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000019
-:8009800000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000099
-:800A0000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000000018
-:800A80000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000098
-:800B000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000017
-:800B8000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000097
-:800C00000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000016
-:800C800000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000096
-:800D0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F15
-:800D80000000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FF88
-:800E0000E40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000013
-:800E800000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000000000000000094
-:800F0000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000013
-:800F80000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000093
-:8010000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE00000000000000000000000000000000000000000012
-:80108000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000008088A8888288888A280888888A8808A088820000000000000000000000F0245C0000000000000000000007
-:80110000008AA88882888A088088A888828A8888080000000000000000000000F08CE10000000000000000000080A888828A08000088008A28A888820000000000000000000000F0766C00000000000000000000888AA88880A8888A2808888A28082028280800000000000000000000004F6F0800000000000000000080A8888280088A6E
-:801180002808888AA88888A08882820000000000000000000000F01D3300000000000000000000888A282888A8888A2808888A2828A888828A080000000000000000000000F0AB5300000000000000000000A0888A28882828280888888A888888A888820000000000000000000000F0C5230000000000000000000080A8888AA8888AA8E7
-:80120000880080A888008220080000000000000000000000BFE9050000000000000000000088828AA888880000882088A888880000000000000000000000001FD9070000000000000000008028882888A8888A2808888AA8888282828A28080000000000000000000000FF68094280C1488441224841430140448C0200281AA221202141D8
-:8012800084018009424A0842812084A148004800321820228842088481281A222124F81F21004E1881B044C148CCB41C822666432A9128B044D848C6242E14492134481860444222389222981AE881A284A862482210886584A25AA2A44A888282084AA84228381A8239C88898521D730000811841221844422A012648284C0816342412D2
-:80130000480040040020011200428086C18800A012C80020084A4208121282A20048BF4A0C808181144888544880031840446444001242838201498524220228A08428808222040018A08400D2122222888848C028830283041A0CDFB50C4018084142442A0400400422802202000000120098821282884008004830488084020000000042
-:8013800020029800C74A208404200481A04241412800804204802201180020A118009048484A08000048200220220200202202202101A081ED6700001400000000000000000000820000000000000000000000000000000000EB6B90414B21A1A04390281011842118084230288C810580848192C8202242A82480C53A122848166249816B
-:801400000082814A82048481008412984901388148F0ABFA0040810322191404320025B114082F48216148202222A1284244430243E428014880442484C3242001B014224414A8838004422902844668824A088C42F8D47330414C5212322A8432284411411882214B18308489931C8082A2142A81564841E04264884848585E2A80827666
-:8014800024229818008E24893464488A0342202482819114845A1A28067FC306201108186014001A02501860241220A8140080084A288202122302004921842191140080014008848140420886384822008184AF1F0F22121800001E24430214001220110200C0484240240240A412800118124B82100445024014C82822122008002A9429
-:8015000088848145982848FF780B41514511B4117224A1611CC458005A4A4151144A4A24F4824C2466848392A842A04383258218C88A2E58898404128B82281EA84638B28B81288A45522800A4421E6886C8648E42884A8284FAA17C1004130119011848C100488011A41841248D44304483A12400284A62814902819823C75820220110E4
-:8015800068842992888922048C0188858214888A84846842428847FD80D241114424D241A2425B216A01149A424111211622844882A242E0823844208104B21048085886048F4228B23418223914E08922121202006A61844DA88C186A842688F6FFCD00B012222166122163021811E0482248C418CBC24E141218324418874A16C2284826
-:8016000000162A8464238B24123AC468823842908821581282846821402218081012922489F87CC4801424C42460414220848668162D240000004460A20096C48418F0228822810000C04828830823012820442484028480068860882B4820F1A8DCE0228142011800141460A3004C048240024008424800842A04803128214468102401A7
-:80168000818604A4400822800828008C02400824FF4D4F21250238182E1548711CA416833A2221431414B824C842C014362822E144D22418A81428278226028F24427224A8344A6142A28B213014866822E084018C022308224860825082482684F8BE596022442F124124062128001C91418882203948438101508442860843128824C8DC
-:801700001883051A82042280217848224842A814808824048190A2848880688840F8C3EF241C4102168204100420048145080018124C54848412C9018180020044884C642448604140A44100C82200A120820281801484088D22FB3200450110544131142961842789148242828223281262882981296222812C8541824282C58860214096
-:80178000A4A420C1621064488121838622440444214994248CA88244008F6A014A8161814C92220060861428829081194144022280644220688822244688220142124D182200188288288985224314820421219044284A8882E282042B48CFB84C8222420180819412C08C41601500281218424A41A2418388840142204138842022280144
-:80180000494124721854224012348200224AC28610D8280824C724882A08FF2905C01490114849142244251692118B5216082440341490884A281438868889028126B28846D84831484400822064C1C05818A44200811A08C041A82110145894FF4807241CD22224022A71440881448012A42443836849B0480841000080A8241242100404
-:8018800022C0288860442210460641882902430824222942F884420088F0C4910000448301C0244818864104403824898208A228C024208602124244A08100106442800260242028220112004148412D1420084426D27804424885053800462101424813889185100481301290844C0642288522C4184148A2282A2182218891888A62A178
-:801900008B3883840890488124401402288C048524F47CED608280052064421845B18181E141081D24002008CC01C1A3818815B81828191834181A5218888116084882128482484942582846064EA244221A22C84A8112463832F0E33F2429267313D82112F21452E02494789D6A4CD911B544E891B829C8A687492F21C1988D4A29F588EB
-:80198000C84F88C316E1AE38A7218BA4AB4445B27E3C2489F334CCA321664249A1274127A290188B416D2A8D4A9028426F2891244D288F683E2C2B244FC824DC1491C82FE6062AF1413289E143B17447E154341647D58E853F8526E891911445249A96283AB434781CB414B228DC84AC8683A472ACA4313E548A61C44483E846D2469124D9
-:801A00001E84988FCCEF48B258F996442FCC8938226E222D58ED4C4C7822E22431242FC8FDA84823D2CAAE224724DFB54E613545553441814E24E3D25113B15421A8A19B4A9F44E4191124B284384CCE142E882F4461418B2E8E4848843A61828548BC98ED8BA83418289A2D684836B218D5E6E4A6FA2422874A4A9942428E8228442F42C1
-:801A80007442E824D224B8481BF4888E2E287F51430121100645014501450100544004204804814004811088110881491118040041844140420800400240480285048150485F934B53554D16115F72D78CF61476AFC6A2139F85F135277F1DE112A35F1F94F59DB93E32EF8ADA44714CFC68F26F82E3437834F432226FCAEA82A3338F221E
-:801B0000B932F138622F417178A4558761872462EAE243A2599E1CFEB22BA74761842F44FED8D88FA6F272566F24F412326722EB15E3F256182AF21E5A8F4AFE38B8AFA6F496771455F5755C13F13525CF81F43476EFE6F27717EF83F235B77F57EB13E385F75515DFD1F11496EFE2F222A2EFCFFF4CDEEFEEFE7ACC4B474F6EF78E8CAE39
-:801B8000AAAFA5F76A6AAF87F2787EAFCFFB79198F8DF4981B8FA6E246F234FC3AA2188F89F9DAA87AFB4416E788CFEEFEDEDC8F86E265F746422F61F12224AB55C722CFA5FF2848AF81FDA6C48F8BE9AFFF63DA345F75F412439FA3F22733CD2E7F65F77B7E6F63F15B5E7F72FAD3D51B731BFDDF55F59D9B6F62F2BEBA6F6AFB6E6E6F66
-:801C0000E7FF3638AF855C444F66F7262EAFA6FA123AAFA7F5121AEFA2F7921EAFDFF5B4BC8FEEFF566E6B444BF94CF8A42487CCCF6FBB42FDA2A68FC5D66AFA92B4AD282F257746F216124722EF87716AFC7218EFC6F25658AF4AFEFCF84FC6F58519347F75F51B43BFA3F23733EFE5F53736FFE7F77757FFF3F33EB63F57FF31719F1513
-:801C8000F5D5D5DFE9F926A6EFEBFB32B2EFEFFF5EDEEFCBFB7AE84BAB4FE6F62E2EAFA2F83A1AAFA6F64A1AEFE7F7FA7EEFDFF5ACBCDFE7F7566E2F44F694B447484F4AF2EC2CEFECFB5ED42F6EFEEA7C8FEAFAD2F6AFA4F25E526BC44F69F92626EB77EF66FC7EFAEFC6FC36FC4F4AFEFCF8CFCEFF3C13B024011C01490122122008921F
-:801D0000E08904820085A44828822028042818802184082A29A41280092E8290141E482A08C0484008C024400489224804FF8C0186E1411244084CC4111D444B141781181100542244128544D848311470240884812A255484838191282091448021018C8408654288C82827248264602486B8480229A8488942E1970B3CF41124C5F21161
-:801D800024C3F41124E7141D24EF14D141F24A911D28AB9451AF543924AF5439242F147924D85AF924481CF9244A8D854FA27418F1244A87192E5A8759ACF49824ACF591242CF4912485F2912483F4912CA7241F48B24AD1C1B24A9921AF2419B54A3924AF247924B84A7924989A4F8294984FA2F4C3B350921F41B62A24716243F8441347
-:801E0000CCF26C134CE252D981F44AB149F2429747834E9745E8347324F8489565F842B12E188D916F827C18F126C887182F82F598256D4B8F1CD284F591282D4A1F49F62C421B29C3F49128A7261F48F248121FC1F64A861F41F24AA25B218B8443F3428247838B8436D842B836B442A81AAB8900800400000000800200000010020088C8
-:801E80000000400100800400000040042800000000004BFE10251158411212481416913142888B49809C142AF44814C6D4428132244B522A240200984A914818004C880427184929A81C4EA210282204001A4C4288C248200944F0827390428A129112844D21400285C2122C02341C6124121D22229582A141828584B8449212230483D29B
-:801F0000241188B1181C92122909214D4140682A001E88225E8840E84EA121A0291E2A8CC228C6D128F2D22E9043721411814D314824183CF31442A8EE183419DD2424E361D42444C63249B6646143888E442721488A91484995191292A123B442798211064AC1CA8E2284F01488223EC8E081644E12281E888D32AE1A844C24F3FD1F103B
-:801F800004856241180011148400210012421782A817812081C848282200A0128121C04886840120F944818222002842008028912AA024002288A42FB50310011B214581060012200112144800251481588100460400602240222502221064412C889412448B12106281272400100240A8142014E43D476146C089248312E411F242191461
-:8020000087282C6212113C08711E29922E882F2AB54482A9254421548D4444237252C4C86B218887492835D424E2216A883B21E0448204E0A8823C187094A2181E264E948743292C8A628883F66FF22002823023442E11230589119212A01815D2146412184728888614A8244140450825C2164638125243835241244343480323224408EC
-:80208000818A9442C082C0224C512486A828228CC86ACF570D461451181953484A029111822213124103C0182C38285E2362132941C244304441222A246862828C0829C2242C6849292B34544438B082D282D128014CE128C114C22E18484A0142447FDB039126025042248082742402C024608188290482206182442A741842A41212B046
-:8021000018024681A148809D222602282C81225212002682020083488201E261482CF4C83B1048314820941189120490C4A024844190A44602A742409218A08188842C628442B94131261826138864811424830439C448166E4421284904442B2489E88288123822895248EFE4082741295141161168C2901211301924888E4120025C31C8
-:8021800024522D8888800800421200222082010089814424080032842C6128182B422001812100F0BAFC1413712253492C61C44CC32869C2416098B082F4488141886B84586B28AD449628921C4A3A8844A06118421321C634181D32D822121D18688F242148518216342285C2124582D124E2847218E283C82886C8242E488D442D78107B
-:8022000026011150812112C0242B14009018222851201362880010B2184232482E1A8124A0C24002872240426422684641E82481028A4482842808B04202006FB44F42015123011150821225018230C2302252318221CE1530982848294282334828AE52128A022C49E4220124363231881A88222122044646822826B11848084281247D32
-:802280007A402481114824544242118921944A8815288474242818040041884529914480018440EA5208C8828A82222828129896008301898991182B18262424C42828D084F858D1B044210280A61224222542B48251212C417882227182225132142538211051822C8801290865622843410227227022928821422902100492122130280D
-:80230000002829121412A8426D2E60A211818D251446384114800200442A0190684A31E42C0614A01840020048143448492201301419524824288093124A028BA41004248416261A9492887F7B012F189411801124A3411421C0224882821170483421848140C829241C028C44B81198122002892A968418C928D12888381284E881291A04
-:80238000084440C2A88904204888C161AF9A078084462151234C22048F14A18414271238C222298A384240812804588C6841182538C48742842ECC43212884823482181495A41A84C8812889C2228D842901A84C08212AA882F016B20064CD11214004C4534214B11888644441C90490841849084321388480022200581200000044200890
-:8024000045828204800182412301828C2411042BD9143227A230242609132382612A2238160121830849019E25214C021605450240C2828A8112A2142128274C4045342419C146C0840000412634442121E928411414F47F7D400868E02104004986C41144C0315C01C0488C81E4821191428418228C228272340840014018C1448912315D
-:802480005841803148C084299C222200C3A8242243847C2212F8CFF510F182244F1112E26141A4268D4F5E141E1A1A3742829F74F1E2D44572527861B294E164FC51142531145D816F82B484981216C8322AF316AA1AF7A4142F6598324CBC12B384128EF924C125B412B438D846A12189A1832318E243A8A99E92CB65814F8258C2879297
-:8025000025FAB1E8242F11E6A7417615D811E212F51241227571497462F3114836D18424F1482889A6D99D4811CB824F82F821198CD2187822FA6C48267212D926F4485486FB18884D5143AA24828F22C83C8F7172495A1C8FAAD244F2A8EAAB825EC883F45CCAC7612F88334ECF82F222824F2AAA6CAABD8433ACCFF141F1641615F12BC1
-:80258000188F52B36CF45B225D163B242E226F1AB681F888B33F24B99258352B5A4F6AD89EF242866F9BF3826919F2C8449672C184E36192328B8E9E8CA223D222E68AC2C2672B1F6658421F2B38A72F49B3B1CB942B1C5242AA52224C815A2C2E46274486D8C2D54AB144E241E844AEE8145014844501C501C501852111885418400444F6
-:802600001285845448195448191488158815883148188100418422846642582484C0482AE1888441C8328418D028018110F81F6CF011236D22BF62F2227EBFA1D836F24A48DFB4F673799FAAFE9E98AF9AF9BA9C87B8AF8CFBC88EAF8EFC89933F1EFA65736F1EBEC8E81DED27FA63E1CF66F346547EE21F15F424644F69FD1F466F6DFE76
-:80268000C2E72F48EA2CFE1339ECF233E14FFCFCD7C73FFDF8C2E26F68BAD2A9B57E3227E7DE942FA1FA36B66F43F174D42F81C8EA8E824F45F574DCA7A2DF2145D333F2527B5F63F232373F23F13323AF25F44B6BBFB7F7ABAAFF6CFFFABBBF6CFF5B9ABF2CF8FAFAAFADFD8B8FBF3FFB67637F7FFFC3C18F4FEF34F542444F6EF67652B2
-:80270000AF23F77B532F42EC69F81457EF6FFF8222AFA9FB92963FBFF5A2A63F38FAB7F57F7EFEC3822F2CFEC2E62FE7FB66BC9EB22F65FB12166B996F23F926B42F8BF13A18BEFAEF4AFC76744FD7DDA4F33C3A141F21F227763D367F43F3393AEFF7F34B72DFF5F752739FAAF6DAD59FBFF41AF29FB8FCCBDACFEDF93A9A8FBEFBC6C7B7
-:80278000DFF2F7E741EFCBEB9DDDE4F941C3CFE2FA5E5C2F23F793492F8AF3D4D6EFF6F5D2E2AFEDFDB29C6F6DFF1775AFA3F1B7A5EFD8F4F777BFFEF8E646EFE8F8F6B6AFC7FDF8FAAFACFED6D6AD886F63FB8E3E4F47FF42E8EFE7B924FC6E6C4FC9F96CDEEEAC347F73F23F77FF63F2273DDFEBF237357F66F71F7F3FB7F7BB3E3F7CCB
-:80280000FFFBBB7F2DFCDFDABF2DFDFEBEEFE7FF7FBFFFFDFD7F3FFFDFFF7F3DDFD7F76CAFDFF6F66CAEEFA6F73A2ABFB3F72A98EFEEFBFEDCAFAFFFCEEE6FEFF7D2F6FF7BF73E3EFFFBF91BBFFFFDFFFFBFEFCEFECCDEEFE7FB6AFCBED2EFA5FC1E5EEFA9F81EBEEFEEFE7EDCEFC7FC7E9EEF83FD7C78CFD1F16C6A59092901260125418D
-:8028800088A141229A048A0492A0482848309128820000440088284130264222100488603212A04800204806A048449A442408822F850A80D222418C8156121A56148214130148541288124E81C0951309172820022A21D124644522C2188029A81212141E242D8282244C22A248244830842D2422A3249222488D24245F8A013CF41124B8
-:80290000C5F3112C87141F41724AD141F24A111F41F24A9119B24A19F54A9143F24A9143F3429147822D955F82C4915FA2C4814FA264114FA265192E5A96C5DA9E24ACF591242CF4912487221F497268F29124A7241F48B24AF11124AB961B21AB9453F14A9243B34A3B34AF24792498924F8294984FA2F4131FD0B4A461CD431E2CC714A5
-:802980001A724EA3218F34E141F268971D248DB249F64893324E9717818F643B248D953B43ADA51D528DB54BC28F11B82735882F227558C5938F5882F5912C6D589AF62251967C62F3912C47241F88A2141FC1F222961FC984F315682F247914E8247B34F84A92478289B936B44AF824189B172028880400000000800200000010020088AD
-:802A0000000000008480044008004041040000000040012FAE0621001433047014012621284258221843814114222369C28CC88A90446331114C15A42C18C02A288088B811981228854382584121B082014A28424402260226A8828E419BD6602213082341E812442126111203231181A4241140084601800240480210C1421A12A4812504
-:802A8000923124001D164014A1682CE41882748202454228028628C8449449F29DD26022C22418991411A134601261282783241AB42441410222469324888B8321C260314941A4821F2124D348B2AA41B26181D822012E12816542F1442245C223F2248228C12460822D8243C229B6F41E6710120111216850412C011C08241180841114C5
-:802B000028814918085024874120044601001022081388514114803881428224824241212220088C8488F4FE6620020089114102229200208101100511856481006082008001410000288884294108A01200822110022C022122882200CFCB042163C3184D32E024C11116044621E482414322F41364818C4878528642E181482142E2844B
-:802B800011311211492403E694945922B11402282B1646051378C842830400A8449344C48628C472811F4906252213288391111220B2118C240320F144216018841944C8118E18142260811582810112B024349443024B21812D2289C24400891C82081082782412180621412A043FF90922441864814652211604008415C2124622111869
-:802C00004CD22461428400302829041031444C028810A1218280A11411E01A0114231402200219044B282A688218845F440F181081221341A88120425412888270821142C188221618C2411443C14147814042041480A6244904888AA13481842501644421284D489024400A00250889F44A4710014260148C014E21221F447191047044F5
-:802C80002121028C144406290689381288101288911414588819612149440A418E16822889044C84820A3052C246C4882286188231146F1D0D2424122400808814022400A0414B841818004118800A20820C224014022021912881140014004850229088802841022822A84F3F0B11252261225215483861702124581223581412D682E486
-:802D000084B114686284436611BC2842412EC28A90248034822E4143048183628147182788231249C24268882460C1C82CCC882C829828128B862F65071840012621011266A2411C01A0482413C2841181800142C08448122094141260412A24C11216C492924366811021440440D28444A24A50841810082841FF7C0700000000211001CC
-:802D800016A494230188224A2218288212A86811257821C221A22CC328880047181641044C328441250111501228140030840049A21222445B974021C428106111232104222CE1123182218281408831428220D11242024612A4811840042C8808288226A41848004E124148004984341630421A4404481242EFA30A24100200808221A5F3
-:802E0000849246A285806811241542212441815C12211911438414052218144841133181441383326411882223080022200221504210C28B14902130232828222004214440083042484038131D4821181886085608882968144711484C25A88420314930C110C822C1628305490229451224228108827F8D023C0240011490121160132D89
-:802E8000411210218488B8480280A8214684984118442890B869C314442004889681440144492204002C14E1482515044229822515F825C334002621128282E1123412104214022914311190821829012F84484248024240324486A84224C0250080414682A241118042948D0000A082102202DEE7002281501840012CE28802281100897D
-:802F00000111A0840060126820041A684100828814206A42A082D84100237112218121211152624A2124E1410461481F27442238844094222084611227194988BC41484191844243024186A11619240816043248228148C054430C004C02228A449224448CC24248C044224922D2629244100441FF730E2648D13204A0413C42280462C495
-:802F800080A2814A018E41148C81748258828418841C4858144C24A4811C444162824419048511681210B94832418741811A1281042001422846048B3B50121F3A063C2282C211223C943357288EB8F0DB82188B8415C1434AF2521399A41D9D28DBC21D4219CC521394B1DAF943364F41D144E36DD116C5658E251F4188787491146D640A
-:803000004712B5F4431720B512959C4364274A526245A2142CA264244ECC5F584D932186742A312160231E221D4A2B2485F252A1272627145856D1A4A1146AEA1398444AA1A26EC14E1927844D1127144F1276E6E122B22CEC982ECAC130E14B5245E1419339BE44172A2F4442B124FC4B432F1213F441451C14D446B524B252B32624B1D4
-:8030800026B824079F2F042612D2A15242BD211D5113B652B331A18F2AF511411F690D3B889E419A7C85D8A3F488882F39D898A4112F28A2AAA53A19AFC161414D4496386A5A1CF4C1846988A828571A8ECC1F94EA14084FA7C7282E3C8CFC4828123F62D1426F21CAC5444CFA66541E14565424BFFE020000108854381285235128128565
-:80310000A1416081308100200820140111100200140080012440021C28C182C087800888C0A38008887F244FE124D445025F4236C19F837718B82AF359488798EF84F52B618FE1F18A1B2F85F18C948FADF92E2EAFA25E66AFA8C8884AFDD6C6A5DA76F11A1A2D899AA1674F4ABB41A45ECE534E42274C8E25141F58F5D94B7FFBFB4341B3
-:803180006E438F95E584F69C989E9A3E16BF85A1F84BBB2B134B954B8E2BBF244B229AF8CAC86F594B63225FD4F622217F4232439F83F758388F25F172729AFBAA8C9F3AB322F25252AF84F7959D9FBCF92E6FBF967E1EFEDB493F91F541C15F7EF56B2BCFFCFC1A5B6E499E11DE762F68F314614BFA4E52DFF4F463441FD5FF31B11F51CB
-:80320000F1593B7FFD5B534F46F65C187FBCFAABAC1E188FADFBCF9D8E944B232B9F2F65B9B2A9224F68BCE4EC4CF85C584F5B4C52235F62D6A9D276F248283AF739713F93B731F323A1BF46FFA2E81F2DFF93833F85FDDCC41F9D79C5DFAAFE4F9FBF99F9AA881DF14F7AFFEAEBED8FBFA5549A1B9D7AE72BF942654F44F744462FFCF865
-:80328000C2C15F1BF715151F13F398199FF9B957FF7652AFE6F68C8F8FDDFF3A7AAF85F2DD9A6F3CED67E363F6F4324B1F6F65B176B1F6BBD4FD4C5EDF4F42F16143DF6256AB7577C9F831719F35F7431B3F37F6FBF9BF3FFFE3FB3F2DFB5BDBBF97FC149C1F9DF8C4EFBFB4FE4E9EBF9DFDF8F81F11FFE46FAFBEFE4ECFBFB1F45E791F5C
-:803300001DF9F4D66F6FE5C9FEC4F44F6CFDC3CF3F4EFCBDF55F5BFB2535DFD7F2F9BF3F75F77676AFC6F62F2FBFA5F7FAFAAF85F14D1F2F74F1F6B66F47F7F6366F2FF5B7B66B536B574F47F7CCDE6F890123022302264168121A048628A248349A048A041984A249004A2208114239A124884A92849094426D81D014094F1289F42481F4
-:803380001A74240126A1418044A7414CA241444842A024D07A0D1411813042120027241A0290120092148225628185A1481C6182142D488141C01285A41242184221281C0183A2219041148C948284888488B220981241A8C084823FA3082CF4112485F2112487241F41724AF21124AF24F11124AF24B911B24A3915AF243934AF143935EA
-:803400002F147924D812F924481CF9244A1CF8254A16F1254A96F1234A96D5A2E449C24A1F49C2531F4952281F49B248F19124A3F48124AB141D24AF149921AF3419F54A9543B24A39242B94478229FB2448984FA274550C4D4A1B61CD421B21A7241F4152221FC1F648131F41E274F9112C4AFB15282D933E482F5479B578427524D85255
-:80348000F9A6482D112E5A4E955FA2E841F8254A923FA264492D4B9E258CF4912C2D5B1F48F6285217498B141F49F248121F48B24AF11124AF74C824AF14BB11F2488543B24A19F442B2478329FA364889F8245A6FE5098482480000000044800200000000008008000000400848000000410000000000002501FB263041328001002258C2
-:8035000080288205889011800D18004724702402221260484200432184183291208B94250000601860438843120288490248AF2C4D4132810060311014513442006452244002004100148001203211C0244814D0120341100C82102404884522C4421230482682021691241F4749D121240E0024204251344928A24264122414241260213E
-:80358000004355124B2812221830811144488D15423B94E051084B3870A4014143042A5824422C273924836422A642641152FF9304301120011301444A014280014A0818A0840041004002002216848402002821008442000000130841002100223024FF96011840110100001A0212242004214381011800400400800100002144880000DF
-:803600000060244022481284010081848141DFA2021116022D121118137412741804008001174147818304AC0512124800415818901483C134C011442C2181421421011882208284011B12642882286044442CF8EEBF1021410331183C0416AC1220418221C4128C9118200418800400481218128C61414001432101440080812814422259
-:8036800009471224222012180C247F5F0B121092110090140000001015C44418AC810118400444120041800212613082224081010020820424184301880048C44CF8FA7E40824204104204269814400114008420E141548421001290141821181800401404001008805222428008122100848488A11218CF350E19542442100280243442BF
-:80370000412400802801821092821424124884102884C421208421419A2100188242845041008100844C4402100212FF9B041091111100C011119011008A24C1121042084844005084400400404A04402421410810020000002C8448020086440CCFDE0E197427220121001C3149211214C0C11888009244E9948414241084415482481805
-:8037800028846304441001818921286482244220081821606410084116047B790050141124108424E2414401210012AD1210A8410000C048858401184200604118442B12120024400214008480948A50288068888170890C401224C44400A041002024810580011841200100808141041220011212181812180000000018180081908418D8
-:80380000C5023D621444401118124A044511B641015042A12014028424001800410000111241644164004002246048008816022444828626C81800F088732440020024420000100200219012200100418001442001002301000000004002000000000000AF830D17441011024880011221481800480042001006002001004400502420018B
-:80388000446110028008212748431816141404450A21F0922C4042445448444400000000101406184149410400410040240144C01100440080410400000082184078840849415884678F20042C14410125041051121190112D11001618A241210041004141800118122C41C41244001810040000210000402211024C011FD30C80144812F1
-:803900000800648021D1214114048123040000000000000041002400604100444400884410048288111800881B1320280840019014214400144003000000444004004450140000004118000000000000820020184801275A249411488008808481051604684410440800502280011A081212404401402881445424C01610042144248A62EB
-:803980006800442001106228873A246744172C1072884258421E142C11B413A5112C94566D4A42A5A61523B118E141117414941444701414644140F41411E02111F41612433116441E14444150444318522240044488456448311E988485A1886FDD445121865455247D44004081452154116417112449148801610010140412E041C1112D
-:803A0000441E144440542244184167211654620082908265A2886502828C181414D4945126CF1E0C1C04A5D2C94461644984F41644376150211A31114C1104258A34441002210018184911240110F41314C014181224182C01400460289A7814A6814D1488C5E289798AB4124144F8EACC00654158148443044714603416681412462361E8
-:803A8000448446224124410444408441049014901480012190140010042C0888000012008506852451481FD946B141541334484E4A2532424F31F452414E1387818F94E545642416E224F4424824124E422721002311C41420B114011D119014343D13216F41A11118246721255226257282D62258222F68F886922F28F912122B898AA879
-:803B0000881F61E128E941A1112F68E88B49F141415F94542C344FA4F4424223E431F442412F25F15C5C8F81E147E734F14272242F44F452525AE521F1121421411A018A28A1811A11F411111F11A1111E12FFF1B112F1465E4B111AE561E161C11225526627686D84242F6AFA86926BB86F49B992F88484CF48B891A9998311F892924F86
-:803B8000EC48F345477D47155651BF54F44A4E257455B613F411533F41F111111B713D43173165B24EF4485A2B114F24B516514645D44411D4448871141464415F5161514F417114F6131D27212D44444F416161676127616516D26458622F28D822F286862F68F816166F48F984848CF8961EEF89F91E1C4F81F1849E9D16343734FD47E0
-:803C0000F55FFDF554EE657455B613D4737513F541515F11F617533F23F14646E5FC1A1A2B554F61F116144514D44451444D844F417194F4141447415F51F114154F41F114163FD1F11616AD4645F454141E16276167416514D26458622F28D826F28482472A6F29B986B984F88C8AEFE9F9969CCD1CCFE1F18C9E971100000000120000FC
-:803C8000000020010000000000180090149014008001240000402209402448240800822FBD0F82001002218061412112301421102211021800000018008001181225220112244418104244020025241802880000242E93C0421F4152281F4132481F41364A1D64AF34F11164AF24B911F64A925B41AB944F82F44A934B43AF14F934482DCE
-:803D0000914F83C4914FA2C4814FA264114FA265192E4A96C55A9E24ACF591242CF59124A5F291248B141F49324A1F48B24AF18124AB941B28AB9451AB9443B24A39242B94478229F92448984FA2B4FD056D481B616D431E2845F11168E592618D131E64AD871E6C8DA34B613CE882D472F93448AD933AC4952F83D452E8A2C5952ECA5CAD
-:803D8000E8A265595FA224D9B4E519C25A9E2CBCF59164ED421B298B141F49324E1B28AF24F18124AF44F18124AB3459B24A3934AB8443F24A92328D842B43AD842E52FFAD07004800000000448002000000000080080000140000480000000044800200000050127085028200410000001800002041284104440000001200100241002097
-:803E000001120000820000241800810000CD3800130821604840B442010018000000008001004002241280010000000000140000001400004041F8BE1C0011244C0400444A0143012A0100188112400218122008244022113112100C428001180010918420024082014048021416D84C0E0000604800210000000000411004000020010001
-:803E800000000000000000000040010000006F23050000400400000080010010044100000000001284000000441001000000418908420000F03DB50015042100001120011200000010024100441800000010022800400244008002000000200100D60200240041001480011880010000210000411200002051280028004014420100280000
-:803F000010C48880041800A0B80051000000000000000010044144000000000000000000100400000000000000F062150000001400000000841082840100000000000010020000244006000024008001000000CFB80D008100000080110800000000000000002100002C010021800100240000000021400810F8F3D1004004000000000081
-:803F800000222A010000000040010000000000000000000000000000F0CD530010081001000000104822A23400000000002400002124000080411402004002001824000000FFAD0F0041000000804108000080010000000014000020014002240000100200000000810084DF5B040000400184000010040000440000440000002002000033
-:80400000002008003200008C02000000F03B4E000000000000000000000000000000000000001008000000000000000000F0A629000000240000000000000000000000000020020000000000000000000000006FC90C00004002000000000000000000000000002200008100000000000000000000FFB701000000000000000000000000E2
-:804080000000000000000000000000000000000000F04FFE0000000000000000000010020000240018000000000000000000000020020000CF5A0900400840080000000000000000000000000021200100000000000000200100002D2D000000000000000000000000000000000000000000000000000000000000FFE40F000000000000A2
-:804100000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F000000000000000000000000000000000000000081000000000000000000EF2C070000000000000000000000000000000000000000000000000000000000F04FFE00008400AC
-:804180000000000000000021000040028001000000004008000000000080010000CF920100000084000000000000000000000000001002180000000000000000280000F0C6E1000000000000000000000000000000000000000000000000000000000000FFE40F0000000040050000400400210044001002188088022180018840080000BD
-:8042000028840000800200004FB1070014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C0300004001008004540000484004000040040000008002000088000000804208000000F04699000000000054000000440010024004002180018828100218800884007E
-:80428000008042080000280000F0147B000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE001002400100800400281082040028000000280048000000484004281082044400108204440010F28F41000000000000000000B7
-:80430000000000000000000000000000000000000000000000FFE40F000000004004400100440000000040040000280000000088000028004008000000F01836000000000000000000000000000000000000000000000000000000000000FFE40F00000000400400004004000000000000002800000000000080020000000000F0AC7200AE
-:5043800000000000004001000000000000440000000000000088000000008400000000BFAFFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21
+:800000002202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F04F
+:80008000EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F9309000000008024842202000000282200000000E7
+:800100000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000C
+:800180000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE9600000000004842282200000080020000000000000000424242F1
+:800200000000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE9600000000004842282200BD
+:800280000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000003D
+:800300000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E0900000000802484220200000028220074
+:800380000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E098A
+:800400000000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000D9
+:80048000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE9600000000004823
+:80050000422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F930900000000802484220200000028220000000000000000000000002E
+:80058000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE960000000022802484022220020000000000000000200442484848002004000000000000005F2901000000008024842202D8
+:800600000000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE9600000000004842282200000080020000000000000000424242000000000000B8
+:800680000000005F93090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE960000002002802404000000002002000021
+:800700008084840400420000004A840400420000000000001F65080000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822000000800200000000000000004242420000000000000000005F9309000028220080240422282200002222200200000000A04420240400004A044200006A
+:8007800000000000006FEA030000282200802484022800000020220200002004A04400482004004A040000000000000000BE44000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000000048422822003D
+:8008000000222082020000000000000000424242000042000000000000F0533E000000A022004842800228000000222200000000808424044A0400A04448484800000000000000BE7F000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002800000000000000002024E6
+:8008800024040000000000000000F0359900008022020048422082220200222220220200000000A04420240400004A0442000000000000009F41030000282200802484022800000020220200002004A04400482004004A040000000000000000BE44000000000048422822000000802202000000000000000000000000000000000000EFEC
+:800900006E090000000080248422020000002822000000000000000000000000000000000000F0EE9600000000002A248602002002002820020000202424040020040000200400000000000000CF420B000080820280240422808202000022220000000000480048000042480000000000000000DF1A01000000008024242202220000802C
+:800980000222000080A4444820042004000000424200000000000000AFCF010000200200484228802202000000000000000080A44400000080240400000000000000DF4A020000282200802406A02222000080220200000000004A04420000802484842404000000000000ADB800008022020048420020022222222222222200000042421E
+:800A0000424A0400200400424848424A24040000000000F0784A000000000048422822000000802202000000000000000000000000000000000000EF6E0900002880828282A6242A820220020000200200002004484280A44448484848002024A444000000000000F0594600000020220248420022A022220000280000000000A0444A8423
+:800A8000A4440000484A2484A44442000000000000BF6C02000080A2220048420080020000000000002024044A8404480000208424842424040000000000F05B8A000000000048422822000000800200000000000000004242420000000000000000005F93090000000080A424A022280000008022020000480048004800000080240400F1
+:800B0000000000000000FFF70C00002822008024842282220200280000000000008024848424040080248404000000000000008FAE0200000000802424022A020000000000000000208404808424044A04008024040000000000F0AEC2000000000048422822000000802202000000000000000000000000000000000000EF6E09000000D4
+:800B80008084044228220000008022020000000000000000000000000000000000005FA70A0000000000422822002200000022000000420042004280848404004220040000000000003E98000000000048422800000000222822000000000020044242002084044800000000000000CF2F08000000008024842202000000282200000000FD
+:800C00000000000000000000000000000000F0EE96000000000048422800000000282222000000424242000000420042004220040000000000F0D521000080220200484220022200008022220200000000A0442024040000422004000000000000F091F90000802202004842288002000020220200000042004A0480044200A04400004270
+:800C80000000000000006B8E000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE96000000004848A0442822000000802202000000000000000000000000000000000000FFCA0600000000802484220200000096
+:800D0000280000000000000000202424040000000000000000F03599000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248402000000802222020000202424040000200420042004420000000000005F1D020000282200802404222002000028220000000000A04420240400004220AD
+:800D80000442000000000000FFDE02000028228004A044288002000020022200000042004A0480044200A0440000000000000000F09DF4000000000048422822000000802202000000000000000000000000000000000000EF6E090000000080248422020000002822000000000000000000000000000000000000F0EE9600000000004843
+:800E0000422822000000802202000000000000000000000000000000000000EF6E0900000080042262280000000028220000002024240400000000420000000000000000F0C1530000000080044A8422020000002822000000000000000000000000000000000000F03447000000000048422822000000802202000000000000000000000D
+:800E80000000000000000000EF6E09000000008024042A02000000282200000048000000800400000000000000000000F03547000000000048422822000000800200000000000000004242420000000000000000005F930900000020024842280000220080020000000000200442000000420000000000000000FF9A0E000000A022A044B2
+:800F000028280000000028220000004800004220A444000020044242000000000000B02C04000080220280248402802202008002000000000048424800000048208404000000000000C0220000008002802404000000002A022200000042004A24044880240400208404420000000000006F4F044001482D5900849044610000112CE24135
+:800F80006241304812200110835143A1990181850225C12184808124628148484712804144C22424448761288902009F860A118C51839144C9D468E444D142341214D05811D441D24A5242153A282F25E22211C81243147232C1121483C1153019411C5281401AD118944DC48D546F22D4249224122297428143467822F41862282C612157
+:80100000122C7154F21D4A40811148E28164448440224104851144412142638221812D18D042042001418001C4223125912184111A044E3428295242110060446144504818250800BF3F051011924841002721441003181014082648A4142A04006033301111C480018501400281002418412023D218110885024628220212D024643D00D6
+:801080008414003044898494440044002952248001001212100224204111014008811140598450484862410000282449022122211682F17663000014118110040000804206160422290100215021C01A1181810000004844488442000026442402281823011200304900001400000000000000280000000000000000100400000000000027
+:8011000000000000F0F6F200400900D05242519484848B148185142C05126902440000241D181018022CC412200444812502002816688848004004416648028450844FE5084D42205212843D241605842A9151501250122114672294850220014115120113021A422813C411866412701201265184343024466112D02441E828022812CC2B
+:80118000229124A2288773101462A240C225416511C93D8F140129445248411B144C7212792204440044002D18109832846662411691C41424160B2651481428366C846601109A2490248C819212C92282F23F498004141181C011280040D81841484348024018021800154211C12100204102801204240010021C0830142018024A52840E
+:80120000008845F88E410040012552412184216012121C013014400816480100400821444522054441282111414082020000A01412250225026400128902CF760B11121818458951411A92248905508250A58CD48222D12C0281528B434042D24111044226781804184381C23218A5521485C4148B428CBA1202883082491168CA844618EC
+:8012800018049E4487444F9D03141811505225122532244E1814183110816482188C124808360810C8154014648444444432213410522683321448100220D4223814212D8C21422141D04862448B5700202111D84101161802289018107C1E0284412311A1144840022512042CA4128C0118442838494148410489B2888203881812108800
+:801300004258848120A1C1816F4F02512B2415361448402882812212AC21128120123118418148521421841688B248224242019022B3922400122D242C41011884848331221608C41882008909125FD20D200484810000C4114B422800114A2141145834C122001D144348421198121CA121290181482021C241842850281923042644D651
+:8013800028A118402801618412AFE1470244205242A505100118000025028722002051489024904185044883028100001110180800414022C8918002414C01926044848D555025494254A44954522002411B218B42124052214AC2392781C484414914815218C37424382189342220321222114420E181D21442982290141352281612C574
+:8014000014AB12CC48A41820215148811FD9092140A321818481C0118C0200128180014440E5819438244441164132482283911283410223824201248C84110184A9819488928190121285248178842804DFC80F412C0224998212B2124481098865B2183842005C28C144408118C484548114288410094022493218901420496841818BBA
+:8014800012001688424802890158C048F0337F14172214C041448591488551481C82521881548A121141229423222032110090140081320088400810C8148CC282400285826838118E1640022F28011AB81448F4E5137024011121284C8442865424872A28886081828B81C0848975820840482C68428C013084406811101212425424AC17
+:80150000281A1444041028418808C1440000846F550D8444584A8204800600448002C7222222006C214222022302222043180250861444100240111808148091262A013800874830442842FFD30510141216184812CC428D82818D9184A30812242E14882712401464528844C08481884100888019088C029E228082C82829C1281200187C
+:801580008A4101184A412844F1D987241038242400C9013041402488322400C02881803112000040442462415022004436042244446C2842242614024311044100C1446144BF99088480041624822441240120B2146288137481440343884A91A2001188114098818249186448008490128001000019E85842111824481888886981F09CE8
+:801600001614200228603400812518041814586245588285043028102812088342A41200D058018420028425182461811284128460485084124B18418004481F840B8C51824880140426024942C2242128256468188025D8E28111028C819284218CD84284C28C94218184215C14DE120281C02100448002101288026C022918F8DF1314E8
+:801680005D11E7121E246E252B419F56744AFC3C1763F45C2D2F8A722B417C1AE983B2A47828FE21242E4CCFB8F48C8259A3321CD248D251025B2341BA66428F9A78883496A410922445D226D282B8187118DE1262211D2887A51B188E163E28AC5162160ACD1EC49AC4114D4C2FAE0A4CC22A10D2C4D284022D2885ED2848E288FB281250
+:801700005D862DD41F444361984F24B823D3423222004B882A5844869128A9D12C92145041A32818ECA351C21E1DC3F925884147CBC11A012391821D11C3B1148858EC124F24AE148F8F24E4EF4362224435C2428716241E624AC4423B12C1242B888A31CC8D437B996D12AB194E843E1816F98482DFC2415A8483D2CA61C845EC986841EF
+:80178000A4BCD144F81392E4A5952883C2362F48A2A889C12CA386D2887815D944E848B828514C1AAB881AD1C4D84458285F6D0E1220011241800118800100608120412141011424142416416211241A0212301188132112612211221321329122122009A22003A220027F2A4691344FC1F324245F43F37958DF72F25E1CDF67F33B389FB3
+:801800001FFF9CB8BD21AFEAF89B93EF8DEF36F62321DF52F26467DD44D7C8C5F48D9DDFCAFAA9A4CD1C7FD3F337373FA3F3F8FE3FF8F31A3AEFE1F398988B994F69F982998FB9DB7BF51134FF51F19B99DF78B893FA89833F1DFE8882B791D79995F1A832EFCBF32E282B8B6D3C6F49A3334B118FA1F269A990155F91F731335F62F66934
+:80188000289FF3F34E4C9FA5F52F3EBFF7D7CAF1193BAFA8FA9B1BEF85FD7DBF75F33E367FE6F21D9ECFF8F83D2D9FBBFBB9BEAFFAFAAFAD7FD3F23632EFFBFA7C7CDFDBFB18BB8F49FA1A1A37795F71F9DAD98FB9F91F5FBF81F19812EFCBF98D8FF7C18F68F89E8C9F38F81A2EF5DF9BF29C1A6FC9F1AAA86F4BF81A386F25F7FE7C7E1D
+:80190000784E721FFF457316D457F615177F72F24B6BFFF2F23F3DDFD3D799F1BDBDBFDAFB3B39BFB8FA1D1FBFB5F5EB6BFFD3535D6F37DF5EFC9C9CFF58D8DCF1A4B7E762FFD2FA342B4FE3733CFCFBF9C7C88FBB713EFE9C9A77B17F71D164F41D3EBFE2F31235EF43FB9ABEBFE2F31233EF62F35276AF2AFB9BBB77B8FFF8F89A1EEF3D
+:80198000E9F92E1AAFA9FB961E6F4BF996944BBBCD1E4F814BF11527FF51F321237F56F25D5FBFF3F36F2FDFF7F74D4FBFFF778BFB3BBBBFB9F19F1FFFF5FCFFFFFFB3F33E327FA7FF3ADFEFC9F99E8C9F81F3A4B5C7C2CF82FA252A5FB3F3AC8CBF97F7A8BAAFABF9A884EFA17186F61496ED56BFA3F37F3EEFD3B3A8FBB9BBBFAAFB3E52
+:801A00003FAF62F33B3FBF3AFB9E9A6FF8F8AB8BEFE9F9B6BEEFEAF996B6EFE9B176F9FEFC9EC8CFE4F4B6AA302200302620C248438224022440A2492049269928128D24828504850410044918081004411006492891841220098444402449048324714804CB9F602815041564241187224414865832118931818911414228048D241200CB
+:801A8000814128504880028140948210C228241AC2828AC2121A42A2682C29C8135028C092E044084234DDABC0421F4152281F41324C1F41324A1D24AB141D24AB9419B24A19B54A3934AF147934F84A9147832D914F82C4914FA2C4816FA264116FA264192FA264592D4A9E242D4A1F49C2421F4952281F497248F2912CA3F49124AB1454
+:801B00001FC1B24AF91128AB9453B14A3924AB9443B342792498924F8284F9244AFF6D0B2CF4116C85F21144411B21A3D441B24AD141F242941D24AB3451AF443B14AF547834F8428147832D816F82C4116D581CF924C816D1846415267898C5411E24BCF49824ACE441D62864498724962464C9AB1416F44A9416B44A3B152B244782A3C5
+:801B80003434AB944782216F8294124FA2752B090048008400000080020000001002428008000014008480040018000044800200000000F099480031151255144440CC11C22114188604257812342481261C26B241028998244144004412248480084410684181214C09200818002449D1229148D28A8124F4FB972446258A01A1224868BD
+:801C0000290491281D48218631649944D24101824328C9882542022982D148C2A8A39292C0813012842120124114112C0118672880644110C4142688D41819F4D11F304513265141C5818244CA514E8241282E494C082786BD546440666826641D8379822A4A44247124E822D881F31282C0818246582C108812594243588441882A318464
+:801C80002120D142C1128B142CA1858C39543BF5502240032144C064008511C112C0814120D25861822088025024302200850440082412006041001C011840220148445042418BA42004FF1F0D004901008521411121224182142288118182D4180A0050228180D2227118C418800929084D131114B0421851220013581882244800441241
+:801D00004A212844F87ACF702112C521141351268A5322B0521A011216C9421415CABA24D44CC11142341548841122358817268E244885041594242598343E8C12B06A21153C12A911D24A11B18831184A31382662C2422828E79BD021428142211162191890A11100B4241C58218D1123D29434A81621042144A911A2431889948C48475D
+:801D8000885016809121892A2138111210B212581829117112981842841283852804FFAA0340D4140114648C1252231A848221B142810489814A0216054051A10040C28A2E1523031880C82475CA1417413042A72648E11295028748200C124B12282D2442228CF23FA810241411C24A3011D01261846034B821C0149250848C11B14891FF
+:801E00004447248C2872D8024200144682028934560010A82130122280624A6311D8427184E8460128800683F154EF80F1214400400481412417814382122C6122844C03442D16C011812692112348642828701A118441921842D3C8812224501242844189A143881820041212E1A420F53DE92415424234212002610040081058120019B2
+:801E8000018400800490482588C149000000122B2150168984818201008D413048212484800180F274C550412D24501248274211E5624184189922584216E8527192C8344062818CB14561442558122D488534C21290184582438251429391132815CA68241A64821088E81588F148148E4864160823A124A0242F980829115116288180F9
+:801F0000011448A5C14429414802008D154781544840A8A42212291438228714214200481249A82824442C31112212A0214E1245582850423A0432854408847D1A8002208432382281421305C02442230226521C138484A1421811302800482724A2800A40C2246903800390242024884422042E42A012F2208444F2ECA12420116481811B
+:801F80001054224144816C81A421C88AC4484830822A84C18145F24182D0210231A251444324A124118814433A41860124200A12124B2C442C084349144212DC42A148FFD60410439823104188028C82824238142223E221425824C312023022101292242284E024088800C024212100881A02D0A2421442CA24121602000028AFDA4D225F
+:802000002602814008548118491882C821154816A14229014841004904806C8811002C04144800141034412A614449812124228412181828542212222C24F8A75420582884240010123C84002841401A04C012202292442902442D5410064180312488858209C048234546810218008012040000841CF26B4F001A82A2612054481F84D249
+:8020800021444184928A28901440D183A6420021A2188521048812282C0100CC115221465141412C88044E884B42441289384888182988C3488021016F5647C11C002092162081A242309846B4826484CA324841800841331C41C1441C02481022061F42247422118124A842214413C2C2004C084C118484124424E9C4732834A4F0E13F00
+:802100004012512214A122214012B88204908100411828C11182442339842248181922012911641229A8124324984443488168841014024384817244422C04490220027F920F460848004601583302842D8C809281211929AA18C092422903181188861378649181282E812185412C0A24A04B4591821C0822660428122120924270428472
+:8021800054A287441FA846A3219718841CD288F2592465A2259FA2747218D2222AE21428B884E9527414B55176A8F212234B2B2C647A1D448CF645624F4448F123C21CF826764A84F621224AF28A2216B144DC11364D1EC16E7E6B482B9843F5D2724D14AD822AB3C82CA2C34AB6D2A8524E481E312B8CAF8B05212723701B02266142D5AF
+:802200007144D15CFD88A88AF188887D428F94DE28B25998622F92F84214C846E441988665722431221B793F24D85831A250662F42E15C64494D843F6273A117D65274C212E2167A6CA4422A28E449D1A844F61C186C91124D6823F52234ACCC48FF7D086E4638ED226E5823D28255882FA2D5429221476487836F44E6497121F262446D93
+:802280003A97AE4D124DE84A81F4A1311B61EE81B11425F2A8684B255922ADAA1739815F3231614B88214E84BA5B451B881741282912A8614B4447446B222D66E37834E62251C4C1C7464F22F22A5400400C862404188001188001200912819220016044200112881288522041018190185018D01828918880688188800A888008817B2761
+:80230000347F76F63333CFA2F22D6B2F21D557F67D39DF83F77A6E1FDFFFB5B17AFF72C2AFB4FD4EFC1F1CF2C2427F5EFE61F3FFFEA26A4DE41D914F42FA6AAAEFC4B351F154754FE9FBD4FB7F19B972E767F33636AF3ABB13E1C6FB11361F38F2EB6A3F5E7684E9A3F3F95B3F51FBD9998F88A91FCD8C4F4DFDE466CFCBF336844F4CFC52
+:8023800088882F4CF57C58CFC9F9548A6F524DF341637FF1F72E2ADFB2E627F12767BFF3F73B7DAFF7F7FBFFFFBAEB27F75676BFB4FC4FCE9FB6B676F5E3E96EF37F7EF2B2326F44DC11F975F7BFB6DA9B38536F77FFB6A6FEF32F1BF8F6F55E264F5FFBF4FE7F7FEF47EB49F9C545DFBEF6DF1F7FDCF4B6FEFFF7FF1B9F7F7FF97232AF21
+:80240000A7F956866F4F7EEEBE36F922862F6E5CCEEFE5FD7E584F5AFCD4D21EDC346F64F43373BFF3F319137FF1F15B39CFC7F31D7CAFE6F6793D8F4AABD5AF84FEDC5DCFC5FDD5F17DC37F7FFF23B3FFF3BD22FE37515F1AFB8496AFA6F667C53AA2334FEBFA14FF67517E732F67F636763FAAFC13523F6AF73B3F9FBAF263E3BFD2F26C
+:80248000D5D19F22F68183AFCAE264F852122F25F7CE4EEFC5FD74F6CF87F3E6244F44F82828AFC7F7FAF8CFC1F1C49A9F4C43E325F51F37BFF3F3793B7F73F97B3BEFE3F71F75AFF7F6FFDFAFEAEA2FFF1E4AFFFCF5CF5E5F3FFFF7D17F5DFF6BFBFFF7B9F2FF77715F1AFB6473FFBEFE27651F16E22FF7AEAECFF77F26F574766E665F14
+:8025000047F5A5D77F7BFDB376AFFBFBED2FFFB6FEB7F77F55F5BFF7FFF5FDF2762F6FF3FABAAFA5F7D256EFCFF57EDEEF85F1EE2E2F6EF6AEACEFC5F5FEB8CFD3F7C4DA2FF2062D11004042C811844722864861882484441F810480A2414213891201114A02426110024322A4822002254388A1412CA841008004124448004E2412008F9B
+:80258000950B2C9421850214121870464148028314C11212467114D832688120C1858E4244A410912820C8828E2430812722442E81C44384929416B84AC124266281C048A514D44A032504213244F0ACB9C0421F4152281FC132681F41724AD241F24A111D24AF249921AB9451AF343934AF143B34AF147934D852F934481CF9244A1CF824
+:80260000244A16F1244A96F1224ADE254DCA9E24ACFC91244D421F49522C1F49324C1F49F26A121F48B24EF11124AB9419B24A19F54A924782AF2439242F24792498924F82A4944FA2F4C459C0421FC17622F2114C83F41124E3068B141D24AF4299418B9649B24A29734825F34A8513D142F236481CD8A685EBA26C512E4887592E4A56D4
+:80268000C48B1AC2CB1FC9C24A9A56281B6983A428AF1661488B1419F24A9419F24AB4512BB447828B9447828B944393986F8294986F22F56544A02882480000000044800200000010020000000014000048000000004480020010080025015FB40F5023441A1221045522C121100113112A836241251204164C042143341A004904214475
+:80270000238421921484004508850449230142200442181034C82840F1AB3214205881418113122302441A088711805128248D21126229812201A22312D4245128368232486810A41829382423116A22182881908221248504450221A1846044167144A8711424C2256C43201632252341211961411189C32A282C6221267412A212412399
+:8027800071A2624A4941022B14221904239418F01284EC82150823110C4CB316186264442830422C41484CCA44167156F8511C00111450181114004C0250181221122457818004458801C04281491178240225E84402442A090021CC02288100008442412400A0842200AF960826011450144001145012102A58128002A942E8440185041B
+:8028000040088042082BC20020021812248429488C212122088444C03284448242861828D2584F228151846522014B216C6141C9011800814E28C4181AA44128442844416CC2241871182A68C1C01416921414442D218249C11418C188F012482498841E8CA149BC38941A8982C26481FDDC200285554251E01112341487410025881842BF
+:8028800068821829B548A142414C4204444124264528D8860941D04212217122214862488C41848892C8C088414938224B84498248888826F262D124192101241240C4121124141200914A120489024C018440648229220112222A04121818408441D2488141C41812241830128189D12811C85A838166828544F8D3F9001A8401842412D1
+:80290000C03121822138AD14840047241810948818850449E32224022244812A042312686600423228004412608345018041028421894828F16E3924186CC4241321044009416014A81420E284084144130249022AC85840240818100C902A4282A1009011122484622A9448482302218006244C61217F3A0528111022514110029011817F
+:802980000021120000C24484244200104224A821820012004912184218420813420821188582684200820048CF5B4221D361819212565825501A1E21415092182D11A1128C4C6641444F12DC48481498C2CC26042388A28189E2820C283826044D28843284394108948962818904288A6162C04A82814C21D4820A21901411001840021C8D
+:802A000089845884200248000089138402286302414418442410022D826024200218442B12484612E52441582200222018081F21052912C522A444484481404C089081003840142401B8810016C82418C382088881408418043022201224012221842120B22818042392124C021F9706460200000011001C1811A441430481188140180496
+:802A800081444112000045082008008008928A41C42880822292184082A1818A018C01AF540780014355121586C2221C41028622C84288242648022E121004222112A110829126882170820CE141216441844425040010042247238604A22001A49DFA80221268128741234218173822182392282D883022486D1828218CA2A400862242E0
+:802B000002261AD4280124C22CA2281E222AC4262810028A82321230188932288546288138447064786832841FDF09440000844110844421010000100416044181402402800244C42018840448804224283114001004490240041A0240F832950081E484810083E481C21816482811210281411200200118901440040010341418801404F1
+:802B8000809914488218988048C6128280C11244C118F0E369248C5414484C21E2410211400140014122484881C4484C048889080018400448482284800490884042024E28000020042B8244881096245F840543698960123C01172126443224246028C016C012282C8292248C82A81228290121412528D1C222388A106282212A54424466
+:802C00000000209222284130144C82847244884422F5EABE4082C24420528129026110F34134214932A2412148A118238418622818A488876460212A6828664106A44CE9280681161A24022821449022212110222204904286F271D8246F44F19E3C85FA621815D881F4243117148D181F82D198018A7BCCB524D144E68412A41226A4420C
+:802C80008D24188B82E0816281284F42019EBC2E8C8F885488444F41B8A88808C147A316E8487912A4222B2624241064E22FC10A4F4DE82229B148F5744483F37F171468134A7418F31C374743648782155348248BB1A4118626F228422A65611A33444F8438948AA2882961426D48122D1C10E644B2C638A4214D3429F2246425B28258E6
+:802D00004643B184DA62A8112A3B12C554428983E16282F3D424E74863C11845DAB602264231245D2423D23A52826D266F41F2462233F1A34335D122B8125E222B11A7E4ED28E5FA123CAAC4A416DAAA5264ED126C51A2CF23722662286D826CF412AA8E2227A5476227244CD24822E822A2144B1185082E28ACE8A2321647266F8839225A
+:802D8000486ACB2C8D222F48FC2AD1000000422004422004800400000000100881001008000000840000888008888008800400004FD444F2576375FB2F2FFFE1F6EB6A8FA3771AFF3B1BFFB6F64F49A794AFA6FAE3D27F74FC96366D26EF67F762622D2AAD2A29F13C9C4F4AFA188AAF28DA2251226FE7F63636E5FE1212AFE8F2A6EEEF79
+:802E00008CF4B2B26F6BF3F63E65D66654666FE9F912162F2BFBF6726F42F358789E92AF2B594CC9F2ACA24B554F49F9D614EEB3AF89F97C3CCFC6F7ACE47F6548F25763FFB6F4272FFD7FEFEEF73E7EAF77F67B72FFA6F63B3BE7E4BFBFDBEBF9CFCF6F49DB66F25E7EAFE6F63A3EAFA2F22A3AEF8BB924FA8A9A2F28FAA2A22FA2B272DC
+:802E8000FE3A3AEFE2F1B2127D27EFEEFECECFAF2BF3A6A66FCB57664F6252464F6BFB82822F2BF3F2F22F2BFBDEDC2E22AFE8FA8C8CCFC8F88EBA6F25F7B4B66F4BE92BF9BA9AEFC6F26C7CCF4F7E3446F157654D66FFF3F33F2EBFA2F67B33B7F1BFB7F7767AFFB2F23A3FAFAAF6C3F23F7DFDD1932F26F27E768F23D7AAF23E2EE7C17A
+:802F0000EFCBF3B4B48FAAF9A2AAAD8E2FA1F1544EE7E1EFA2F212B2AFB9EBAEFECACA2FABFB36B26F6BFF26A66D26EFC2F2BAB4EFE9F9AEBC4BF74F48F9487EAFA1F19ABAEFE858CECD1ACF4DFD9C942F6EFED2932BDD6FC7F7686CCF6AFFCD15347F15F22C66BF93F37B3FAFA3F77B1FBFF3F23B3ECFA3F37F7B2F63F3BBFBFFA8F15FE4
+:802F8000DF3F3FF16222EFE7F77E7EAFC3F33E3EAFC3F3BEF8BE328FAAF8AAA8ED8E2FA1F1F66EAFE3F22E3E8FA9FB1ABBAFA6FECBCA2FA3FB8686EF6BFB26A66D22EFC2F2BCBCAFA8F83AB84F2FFF3636AFE7F7BABAEFA151EEE5FC2E3AEF2FFFB8B62F6FFDB6B66BF76FC6F46C4CCFEEFFFA93100661846D1148458114C448148E48149D
+:8030000082544084442441240800400444189084800888B02408229084C0828226628924822008C02682850442826FC20122128501811A56221E68141E4823A24125024A01A5042D1200434124885822120023624125825224C012864442041E24252201860482184308922D26802101411826FAA132C0421F4152281F417248F11124A348
+:80308000D441B24AD141B24A9921AF145985AB944B43AF1439242F147924D812F924488D914FA2C4A14FA264114FA264192E4A96C54A8F49E2A2F491242CF491248D121F4932481F49326A1F48B24AD141B24A9921AB9451AF243924AF2439242B94478229FB2448984FA274DD032CF4116C85E24136481F41324A1F41B24AF11124AF4452
+:80310000E941B24A5B85ABB44B41AF1438342F1419F4429163D312D924D518D924FC18814D5A96E1227498C543DE252417C92E521FC8D628F19164421FC9B24A7181BC6AD141F24A841D242B9659B24239248B944782184D4829792688F3265A8D2B4028080000000044800200000010021880084200400140084800000000448002000015
+:80318000005012E017042417221014C81146049045248180441802C0124160C200002002401492346041002011C1329024200810084012B8148261820040F8834A1420887812012504110082152218B2810100482008184110044188221A088880088890A4C1880090240040145841440044D0484211F457AF0017AE2C68418444480046C1
+:80320000358491230A1002A0142186428C11048A01268428C282112A0888E08408491989084902491A0484412815044418264462C21425F2924A400210413211411100244082D418090010042200100400604160416041008012A421210000001008A52403840050841F59034054122002250224100288165818122903200222208202005B
+:8032800010021810840290142800100190180000400400888281F0E491108501141118163911901812233111000012964228B1443114002542A241C0422C42041818602180711294122C0324821002C0164C5228A8208104A8F01A75101144112102351802242C01191108122B1200250844440010124222441204180010042C212151125C
+:80330000244008001861818800C83028F04178406421001418181C01A9011888129100189822186A8121C222005200298201411A021229E121120422008218210044286422800182883092004284100210820190411001237242082A054168400218002400002410021022017022928412008931228051142C145828400424EF750528427E
+:80338000110022485C2122C419284C02000045022480014F22882149180812400460110016040018101404E042092C2891284180612420C17E0000144043089445022400000000230200004230224002C240044400100200248648022410121184040000DFFC0A0015084083C4119C512413C1610020C248801422A22418C0822041782250
+:803400000A0041401441042301002B12446C3188508229082918F2482240820140D2890C220011212885422482140821112410024C03250440C2242004001221C224901200442C010029080018431122C114418744849044009FD20D8002121414110029011612281122110840C4140000000000124400C0240021004400214014020041C1
+:80348000210040043B73001410010000130894118E216082216728412880120220080044242200122812302280024034344004004400000021F0C7B5000010110821000040180850820000241800200112240000006021442100442001412428100400125024F0D13E0090114A02008F21022480010081800218241838800120084C1802A5
+:8035000000211A0812A08145021002400200803212121042845224AF170E002200000040010000001848180000224002000000008001002400004084012100000044AF94430100201122011100001C42212184810444000090820040240144124004000044005042800221400212801402EFDC04318004400210721202888716182888841C
+:8035800000200840028008002100182828008012240850421220820343810840C41480019F9B0B8286011880011140080024840000008001B08201180000800121220020020040060000416100212114E0D7099C039994218211182903115041212814222124284428502280012E82408201885488448412495C422606210021401482427D
+:80360000242821A12131684C5122F0A86A341882124213581334181113092417141E113302242C23C4144C8903001820012C51422241444412414B8144B6522482414512562420C21226B482D1425942244D1121C015F09D7960128215B131021229B133022D1B211D89853881811E18878421902449023A5122602A280012242901982B91
+:80368000212B2A2A434252462F42124244642212242512845144414981015E224974245124DFEF0411171289C21116112851282502111A31228542F928A22187482D3442122124189082F082127086041A4824810116042B1328002421168411524400602216B21242921416445242AD5F2001100889018901890998800998224CA9424C9C
+:8037000028031200001220099A028A82218821882108000000122001322002222003BFF944D21393218F81A1519FA151AAA7913F117112FA921ABF19E1A1F1DBCA2B199F99F11812AF8FFFA624674A284F490B2A6221212B322B131E122F29F914161E961AFBA4B44F4BF386842B884F487884F694928EA4442F2858662546A6112B111E20
+:80378000124F2151444F2AB2B6FB34342F23D154F214744B67412CF2926B243D311F9557981F11B51141529A9FB1F1131B3FB9F18F151FB9F9F3F62B199F88F1989A2BFE4F6AF2B6144F44F684A62B221AC112212B2A23E329F192829E962F41F811B14F4BEB1BF31E1C23F2D4DC476869C4226F4A5A2265562265F616142F21F13232452F
+:80380000526467682B884F436323284F61F776642AF21436DB4BA0231B621AF1181815F213133F13F21B1925F21A92AD162FA9F94B6A3F31D9BBF1BABAAF84B526B816A3884B132B113AC312212BA223E3217112F2949616F6B4154F48F314966FE3F316344F4BF714964F214144F486866544C4144C11C22265F216144F29B186F83414D0
+:803880006F6153666F42B446B53483B11B4EF233219F13E712F259191B119FB1F13B391F317113F31B9395F7131BFFADFE1B9AB5FA3A3AAF8CFC3C9A6B754BDD4B132B221A4112B2223A221E122F28E86151424F5BF194341F21F9363E6F4AFABC744D866B15BEB26F4A5A666544D266D14251222D226F21F116166F69B1B2FB34146F6187
+:80390000F312136F43F566741AD164F1157330226012843C416812841484348424404308001220010021282110064110046B1280012E121004241224400264001244124200F0111A60180000122400101211080085024C1184210100000024000012808261416128002144000000441012140244F052DAC0421F4152381F417248F11124C2
+:80398000A7241D24AB141F48B24AB981F24A9153B84A39A4AF343BA42F547BB4D852FB34481CFB244A1CF8244A16F1244A96E1A26C592DCA9E24ACFC91242CFD91248F22F99124EF24F99124AB841F48B26ED141F24A9219B24A19B54A3924AF4439242B94478229F924484CF9244AFF9706ACC464241E6C421FC132421D2C4AD1C1F24A8F
+:803A0000144CB24A9365AB1441AF1483C43516D852F316481CFA265A1CF924CA16F1244A16E1826451BC6451AC54C1ACD54196581F41B248B11132481F48B24A9121AF44B911F248A453B14A2AB94A18B442598429F91248886D5A1EFA4008480000000000280000000021008008000014008480040000004004000000005012F0E9176002
+:803A80002822000084140018001121008001000000400200000000000021222141001200004C020000418FBB0E30818948011400181110010080010000000000002741800100188008180000000040023011440014F0192F00133688111001140043110114290218004002301220081042624111008120058220110221414160430010C25B
+:803B000024131144021423F11D7E400200008180110100000080010000000000001200000000800200000000000000413FFA053011000081000000000022108401000000004002000000005041002100008028020000F0EC7C400200120015024140010000000000000041000043428801181012188421020018400418002122182841F03F
+:803B800053684002001840082141100100002240840100001004009026840012240044121742002118400418882200122244E0BC0BC011000040010000000000000000000000008001001008000000000000212800007F760E00000000000000401802520000000010084100000000000000002C01008180088100F0A4551001004011027D
+:803C00000080040021000021000000218004212100800100221004800800000040048218F0D636200200001100200200000041100484000000810000002100818400000000001200001800CF5B0411000010020028480050280049040084000000890421004002008428100480080000008840888101EFBD06220000111400000040020030
+:803C8000185042000000218140440200200100840000002C01008901100482007F5A0C0010040081000014000044100400001004000000200200008800A0120000840018004008BFE70F0000000000000000000000000000000000000000000000000000000000F04FFE0000000000000000000000000000000000000000000000000000D4
+:803D000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F00000000000000000000210000002180010000000040080000000000800100006FB70E00000000000000000000000000000000002100000041
+:803D80000000000000000000004759000084008400000000000000000000000000000000000000000000000000001A0E0000000000000000000000000000000000000000000000000000000000F04FFE000000000000000000000000000000000000200100000000000000200200006F8C0800000000000000000000000000000000000070
+:803E00000000000000000000000000F04FFE000000000000000000000000000000000000000000000000000000000000FFE40F0040080000000000000000000000218001001002180040080000000000000000F05C4B00000040080000000000002100000000000000000000000000000000380000F05672000000000000000000000000C7
+:803E8000000000000000000000000000000000000000FFE40F000000004005000040040021004400100218808802218001884008000028840000800200004FB1070014000048405588281082044480022100448002214818808802214818448828842148408481421882041E148002211A01445C03000040010080045400004840040000D9
+:803F000040040000008002000088000000804208000000F0469900000000005400000044001002400400218001882810021880088400008042080000280000F0147B000000000000000000000000000000000000000000000000000000000000FFE40F0000000000000000000000000000000000000000000000000000000000F04FFE0044
+:803F80001002400100800400281082040028000000280048000000484004281082044400108204440010F28F41000000000000000000000000000000000000000000000000000000000000FFE40F0000000000005400400400000000440000800200000080080000002884000000002FDD0E000000000000000000000000000000000000BC
+:804000000000000000000000000000F04FFE00000000000000004004000000000000002800000000000000000000000000BFF20A00000000000054000000000000400400000000000080080000002884000000006FCBFBFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF08
+:01408000FF40
:00000001FF
diff --git a/xpp/init_card_9_29 b/xpp/init_card_9_29
index 26759a3..43591ca 100755
--- a/xpp/init_card_9_29
+++ b/xpp/init_card_9_29
@@ -182,12 +182,12 @@ PRI::gen "#--------------------------- start";
# only one of the following loopbacks can be activated in the same time
my $LIM1_RL = 0 << 1; # RL (Remote Loopback)
-
-my $i = $ENV{XPD_SUBUNIT};
my $lim1 = 0xB0 | $LIM1_RL;
-my $sic2 = $i << 1;
-if($i eq 0) {
+my $subunits_num = 4;
+my $subunit = $ENV{XPD_SUBUNIT};
+
+if($subunit eq 0) {
# Tuning of clocking unit to the 16.384 MHz reference frequence
# by setting Global Clock Mode registers (GCM[1:8]), same for E1 and T1/J1
PRI::gen "0 WD 92 00"; # GCM1
@@ -198,94 +198,135 @@ if($i eq 0) {
PRI::gen "0 WD 97 0B"; # GCM6
PRI::gen "0 WD 98 DB"; # GCM7
PRI::gen "0 WD 99 DF"; # GCM8
-}
-
- # __t4_framer_out(wc, unit, 0x26, 0x54); /* XPM0 */
- # __t4_framer_out(wc, unit, 0x27, 0x02); /* XPM1 */
- # __t4_framer_out(wc, unit, 0x28, 0x00); /* XPM2 */
-
-PRI::gen "0 WS 26 $i BD"; # XPM0: Pulse Shape Programming for R1=18Ohms
-PRI::gen "0 WS 27 $i 03"; # XPM1: ...3V Pulse Level at the line
-PRI::gen "0 WS 28 $i 00"; # XPM2: ~XLT (transmit line is not in the high impedance state)
-
- # if (unchannelized)
-#PRI::gen "0 WS 1F $i 22"; # LOOP (Channel Looback):
- # ECLB (Enable Channel Loop-Back)
- # CLA (Channel Address)
-PRI::gen "0 WS 2B $i EF"; # IDL (Idle):
- # If channel loopback is enabled than transmit this code on the outgoing
-PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback):
-#if($i eq 0){
-# PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback):
-# # channels (XL1/XL2)
-#}else {
-# PRI::gen "0 WS 1F $i 20"; # LOOP (Channel Looback):
-#}
-
-PRI::gen "0 WS 37 $i %02X", $lim1;
- # LIM1: ~RL (Remote Loop bit 0x02),
- # ~DRS (Dual Rail Select, latch receive data while trasmit),
- # RIL1, RIL0 (Receive Input Treshold 0.62 V),
- # CLOS (Clear data in case of LOS)
-PRI::gen "0 WS 3A $i 20"; # LIM2: SLT1, SLT0 = 01
- # (Receiver Slicer Threshold, the receive slicer
- # generates a mark (digital one) if the voltage at
- # RL1/2 exceeds 50% of the peak amplitude,
- # default, recommended in E1 mode).
-
-PRI::gen "0 WS 38 $i 0A"; # PCD: (Pulse Count Detection, LOS Detection after 176 consecutive 0s)
-PRI::gen "0 WS 39 $i 15"; # PCR: (Pulse Count Recovery, LOS Recovery after 22 ones in PCD interval)
-
-# Configure system interface
-PRI::gen "0 WS 3E $i C2"; # SIC1: SSC1 (System clock ) is 8.192 Mhz,
- # SSD1 (System Data rate) is 8.192 Mbit/s,
- # ~BIM (Byte interleaved mode),
- # XBS (Transmit Buffer Size) is 2 frames
-PRI::gen "0 WS 40 $i 04"; # SIC3: Edges for capture, Synchronous Pulse Receive @Rising Edge
-PRI::gen "0 WS 41 $i 04"; # CMR4: RCLK is 8.192 MHz
-PRI::gen "0 WS 43 $i 04"; # CMR5: TCLK is 8.192 MHz
-PRI::gen "0 WS 44 $i 34"; # CMR6: Receive reference clock generated by channel 1,
- # RCLK is at 8.192 Mhz dejittered, Clock recovered from the line
- # TCLK is at 8.192 MHz is de-jittered by DCO-R to drive a6.176 MHz
- # clock on RCLK.*/
-
-PRI::gen "0 WS 20 $i 9F"; # XSW: XSIS (Spare Bit For International Use fixed to 1),
- # XY0, XY1, XY2, XY3, XY4 (Y0, Y1 and Y3-Bits fixed to 1)
-
- # cas = 0x1c;
- # if (!(lineconfig & ZT_CONFIG_CCS))
- # cas |= 0x40;
-PRI::gen "0 WS 21 $i 1C"; # XSP:
- # EBP (E bits =1 in asynchronous state Important for ETS300 011
- # AXS (Automatic Transmisson of Submultiframe Status),
- # XSIF (Spare Bit For International Use fixed to 1),
- # ~CASEN (Channel Assotiated Signalling enable, send CAS information
- # in the corresponding time slot)
-
-PRI::gen "0 WS 22 $i 00"; # XC0: (Transmit Counter Offset = 497/T=2)
-PRI::gen "0 WS 23 $i 04"; # XC1:
-
-PRI::gen "0 WS 24 $i 00"; # RC0: (Receive Counter Offset = 497/T=2)
-PRI::gen "0 WS 25 $i 05"; # RC1:
-
-PRI::gen "0 WS 3F $i $sic2"; # SIC2: No FFS, no center receive elastic buffer, data active at phase ($sic >> 1)
-
-# enable the following interrupt sources
-PRI::gen "0 WS 16 $i 00"; # IMR2 (Interrupt Mask Register2): Enable ALL
-PRI::gen "0 WS 17 $i 3F"; # IMR3 ~ES, ~SEC (Enable ES and SEC interrupts)
-PRI::gen "0 WS 18 $i 00"; # IMR4: Enable ALL
-
-PRI::gen "0 WS 08 $i 00"; # IPC: SYNC is 2.048 MHz
-
-PRI::gen "0 WS 02 $i 51"; # CMDR (Command Register): RRES, XRES, SRES (Receiver/Transmitter reset)
-PRI::gen "0 WS 02 $i 00"; # CMDR
-
-
-# configure the best performance of the Bipolar Violation detection for all four channels
-PRI::gen "0 WS BD $i 00"; # BFR (Bugfix Register): ~BVP (Bipolar Violations),
- # use Improved Bipolar Violation Detection instead
-if($i eq 0) {
+ for(my $i = 0; $i < $subunits_num; $i++) {
+ PRI::gen "0 WS 26 $i BD"; # XPM0: Pulse Shape Programming for R1=18Ohms (0x54)
+ PRI::gen "0 WS 27 $i 03"; # XPM1: ...3V Pulse Level at the line (0x02)
+ PRI::gen "0 WS 28 $i 00"; # XPM2: ~XLT (transmit line is not in the high impedance state)
+
+ # if (unchannelized)
+ #PRI::gen "0 WS 1F $i 22"; # LOOP (Channel Looback):
+ # ECLB (Enable Channel Loop-Back)
+ # CLA (Channel Address)
+ PRI::gen "0 WS 2B $i EF"; # IDL (Idle):
+ # If channel loopback is enabled than transmit this code on the outgoing
+ PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback):
+ #if($i eq 0){
+ # PRI::gen "0 WS 1F $i 00"; # LOOP (Channel Looback):
+ # # channels (XL1/XL2)
+ #}else {
+ # PRI::gen "0 WS 1F $i 20"; # LOOP (Channel Looback):
+ #}
+
+ PRI::gen "0 WS 37 $i %02X", $lim1;
+ # LIM1: ~RL (Remote Loop bit 0x02),
+ # ~DRS (Dual Rail Select, latch receive data while trasmit),
+ # RIL1, RIL0 (Receive Input Treshold 0.62 V),
+ # CLOS (Clear data in case of LOS)
+ PRI::gen "0 WS 3A $i 20"; # LIM2: SLT1, SLT0 = 01
+ # (Receiver Slicer Threshold, the receive slicer
+ # generates a mark (digital one) if the voltage at
+ # RL1/2 exceeds 50% of the peak amplitude,
+ # default, recommended in E1 mode).
+
+ PRI::gen "0 WS 38 $i 0A"; # PCD: (Pulse Count Detection, LOS Detection after 176 consecutive 0s)
+ PRI::gen "0 WS 39 $i 15"; # PCR: (Pulse Count Recovery, LOS Recovery after 22 ones in PCD interval)
+
+ # Configure system interface
+ PRI::gen "0 WS 3E $i C2"; # SIC1: SSC1 (System clock ) is 8.192 Mhz,
+ # SSD1 (System Data rate) is 8.192 Mbit/s,
+ # ~BIM (Byte interleaved mode),
+ # XBS (Transmit Buffer Size) is 2 frames
+ PRI::gen "0 WS 40 $i 04"; # SIC3: Edges for capture, Synchronous Pulse Receive @Rising Edge
+ PRI::gen "0 WS 41 $i 04"; # CMR4: RCLK is 8.192 MHz
+ PRI::gen "0 WS 43 $i 04"; # CMR5: TCLK is 8.192 MHz
+ PRI::gen "0 WS 44 $i 34"; # CMR6: Receive reference clock generated by channel 1,
+ # RCLK is at 8.192 Mhz dejittered, Clock recovered from the line
+ # TCLK is at 8.192 MHz is de-jittered by DCO-R to drive a6.176 MHz
+ # clock on RCLK.*/
+
+ PRI::gen "0 WS 20 $i 9F"; # XSW: XSIS (Spare Bit For International Use fixed to 1),
+ # XY0, XY1, XY2, XY3, XY4 (Y0, Y1 and Y3-Bits fixed to 1)
+
+ # cas = 0x1c;
+ # if (!(lineconfig & ZT_CONFIG_CCS))
+ # cas |= 0x40;
+ PRI::gen "0 WS 21 $i 1C"; # XSP:
+ # EBP (E bits =1 in asynchronous state Important for ETS300 011
+ # AXS (Automatic Transmisson of Submultiframe Status),
+ # XSIF (Spare Bit For International Use fixed to 1),
+ # ~CASEN (Channel Assotiated Signalling enable, send CAS information
+ # in the corresponding time slot)
+
+ PRI::gen "0 WS 22 $i 00"; # XC0: (Transmit Counter Offset = 497/T=2)
+ PRI::gen "0 WS 23 $i 04"; # XC1:
+
+ PRI::gen "0 WS 24 $i 00"; # RC0: (Receive Counter Offset = 497/T=2)
+ PRI::gen "0 WS 25 $i 05"; # RC1:
+
+ my $sic2 = $i << 1;
+ PRI::gen "0 WS 3F $i $sic2"; # SIC2: No FFS, no center receive elastic buffer, data active at phase ($sic >> 1)
+
+ # enable the following interrupt sources
+ PRI::gen "0 WS 16 $i 00"; # IMR2 (Interrupt Mask Register2): Enable ALL
+
+ PRI::gen "0 WS 17 $i 3F"; # IMR3 ~ES, ~SEC (Enable ES and SEC interrupts)
+ PRI::gen "0 WS 18 $i 00"; # IMR4: Enable ALL
+
+ PRI::gen "0 WS 08 $i 04"; # IPC: SYNC is 8 Khz
+
+ PRI::gen "0 WS 02 $i 51"; # CMDR (Command Register): RRES, XRES, SRES (Receiver/Transmitter reset)
+ PRI::gen "0 WS 02 $i 00"; # CMDR
+
+
+ # Configure interrupts
+ PRI::gen "0 WS 46 $i 40"; # GCR: Interrupt on Activation/Deactivation of AIX, LOS
+
+ PRI::gen "0 WS 45 $i 00"; # CMR2: External sources for SYPR, SCLKR, SYPX, SCLKX for TX and RX.
+ #PRI::gen "0 WS 22 $i 00"; # XC0: Normal operation of Sa-bits
+ #PRI::gen "0 WS 23 $i 04"; # XC1: X=4 => T=4-X=0 offset
+ #PRI::gen "0 WS 24 $i 00"; # RC0: 0 offset
+ #PRI::gen "0 WS 25 $i 00"; # RC1: Remaining part of RC0
+
+ # Configure ports
+ PRI::gen "0 WD 85 80"; # GPC1 (Global Port Configuration 1):
+ #PRI::gen "0 WD 85 00"; # GPC1 (Global Port Configuration 1):
+ # SMM (System Interface Multiplex Mode)
+ PRI::gen "0 WS 80 $i 00"; # PC1: SYPR/SYPX provided to RPA/XPA inputs
+
+ PRI::gen "0 WS 84 $i 31"; # PC5: XMFS active low, SCLKR is input, RCLK is output (unused)
+ PRI::gen "0 WS 86 $i 03"; # PC6: CLK1 is Tx Clock output, CLK2 is 8.192 Mhz from DCO-R
+ PRI::gen "0 WS 3B $i 00"; # Clear LCR1 - Loop Code Register 1
+
+ # printk("TE110P: Successfully initialized serial bus for card\n");
+
+ # Initialize PCM and SIG regs
+ PRI::gen "0 WS A0 $i 00"; # TSEO (Time Slot Even/Odd Select)
+ PRI::gen "0 WS A1 $i FF"; # TSBS (Time Slot Bit Select)- only selected bits are used for HDLC channel 1
+ # in selected time slots
+ PRI::gen "0 WS 03 $i 89"; # Mode Register:
+ # MDS (Mode Select) = 100 (No address comparison)
+ # HRAC (Receiver Active - HDLC channel 1)
+ # RFT2 (HDLC Receive FIFO is 64 byte deep)
+ PRI::gen "0 WS 09 $i 18"; # CCR1 (Common Configuration Register1)
+ # EITS (Enable Internal Time Slot 0 to 31 Signalling)
+ # ITF (Interframe Time Fill)
+ PRI::gen "0 WS 0A $i 04"; # CCR2 (Common Configuration Register2)
+ # RCRC (enable CRC - HDLC channel 1enable CRC - HDLC channel 1)
+ PRI::gen "0 WS 0C $i 00"; # RTR1 (Receive Time Slot register 1)
+ PRI::gen "0 WS 0D $i 00"; # RTR2 (Receive Time Slot register 2)
+ PRI::gen "0 WS 0E $i 00"; # RTR3 (Receive Time Slot register 3), TS16 (Enable time slot 16)
+ PRI::gen "0 WS 0F $i 00"; # RTR4 (Receive Time Slot register 4)
+
+ PRI::gen "0 WS 10 $i 00"; # TTR1 (Transmit Time Slot register 1)
+ PRI::gen "0 WS 11 $i 00"; # TTR2 (Transmit Time Slot register 2)
+ PRI::gen "0 WS 12 $i 00"; # TTR3 (Transmit Time Slot register 3), TS16 (Enable time slot 16)
+ PRI::gen "0 WS 13 $i 00"; # TTR4 (Transmit Time Slot register 4)
+
+ # configure the best performance of the Bipolar Violation detection for all four channels
+ PRI::gen "0 WS BD $i 00"; # BFR (Bugfix Register): ~BVP (Bipolar Violations),
+ # use Improved Bipolar Violation Detection instead
+ }
PRI::gen "0 WD BB FF"; # REGFP
PRI::gen "0 WD BC AC"; # REGFD
PRI::gen "0 WD BB 2B"; # REGFP
@@ -304,53 +345,13 @@ if($i eq 0) {
PRI::gen "0 WD BC FF"; # REGFD
PRI::gen "0 WD BB A7"; # REGFP
PRI::gen "0 WD BC 00"; # REGFD
-}
+# PRI::gen "0 WS 80 00 00"; # PC1 (Port configuration 1): RPB_1.SYPR , XPB_1.SYPX
+ PRI::gen "0 WS 81 00 0B"; # PC2 (Port configuration 2): RPB_1.GPOH (ResetID ), XPB_1.GPOL (MUX_SEL0)
+ PRI::gen "0 WS 82 00 9B"; # PC3 (Port configuration 3): RPC_1.GPI (nConfig0), XPC_1.GPOL (MUX_SEL1)
+ PRI::gen "0 WS 83 00 9B"; # PC4 (Port configuration 4): RPD_1.GPI (nConfig1), XPD_1.GPOL (MUX_SEL2)
+}
-# Configure interrupts
-PRI::gen "0 WS 46 $i 40"; # GCR: Interrupt on Activation/Deactivation of AIX, LOS
-
-PRI::gen "0 WS 45 $i 00"; # CMR2: External sources for SYPR, SCLKR, SYPX, SCLKX for TX and RX.
-#PRI::gen "0 WS 22 $i 00"; # XC0: Normal operation of Sa-bits
-#PRI::gen "0 WS 23 $i 04"; # XC1: X=4 => T=4-X=0 offset
-#PRI::gen "0 WS 24 $i 00"; # RC0: 0 offset
-#PRI::gen "0 WS 25 $i 00"; # RC1: Remaining part of RC0
-
-# Configure ports
-PRI::gen "0 WD 85 80"; # GPC1 (Global Port Configuration 1):
-#PRI::gen "0 WD 85 00"; # GPC1 (Global Port Configuration 1):
- # SMM (System Interface Multiplex Mode)
-PRI::gen "0 WS 80 $i 00"; # PC1: SYPR/SYPX provided to RPA/XPA inputs
-
-PRI::gen "0 WS 84 $i 31"; # PC5: XMFS active low, SCLKR is input, RCLK is output (unused)
-PRI::gen "0 WS 86 $i 03"; # PC6: CLK1 is Tx Clock output, CLK2 is 8.192 Mhz from DCO-R
-PRI::gen "0 WS 3B $i 00"; # Clear LCR1 - Loop Code Register 1
-
-# printk("TE110P: Successfully initialized serial bus for card\n");
-
-# Initialize PCM and SIG regs
-PRI::gen "0 WS A0 $i 00"; # TSEO (Time Slot Even/Odd Select)
-PRI::gen "0 WS A1 $i FF"; # TSBS (Time Slot Bit Select)- only selected bits are used for HDLC channel 1
- # in selected time slots
-PRI::gen "0 WS 03 $i 89"; # Mode Register:
- # MDS (Mode Select) = 100 (No address comparison)
- # HRAC (Receiver Active - HDLC channel 1)
- # RFT2 (HDLC Receive FIFO is 64 byte deep)
-PRI::gen "0 WS 09 $i 18"; # CCR1 (Common Configuration Register1)
- # EITS (Enable Internal Time Slot 0 to 31 Signalling)
- # ITF (Interframe Time Fill)
-PRI::gen "0 WS 0A $i 04"; # CCR2 (Common Configuration Register2)
- # RCRC (enable CRC - HDLC channel 1enable CRC - HDLC channel 1)
-PRI::gen "0 WS 0C $i 00"; # RTR1 (Receive Time Slot register 1)
-PRI::gen "0 WS 0D $i 00"; # RTR2 (Receive Time Slot register 2)
-PRI::gen "0 WS 0E $i 00"; # RTR3 (Receive Time Slot register 3), TS16 (Enable time slot 16)
-PRI::gen "0 WS 0F $i 00"; # RTR4 (Receive Time Slot register 4)
-
-PRI::gen "0 WS 10 $i 00"; # TTR1 (Transmit Time Slot register 1)
-PRI::gen "0 WS 11 $i 00"; # TTR2 (Transmit Time Slot register 2)
-PRI::gen "0 WS 12 $i 00"; # TTR3 (Transmit Time Slot register 3), TS16 (Enable time slot 16)
-PRI::gen "0 WS 13 $i 00"; # TTR4 (Transmit Time Slot register 4)
-
#------------------------------------------- Instance detection
diff --git a/xpp/utils/example_default_zaptel b/xpp/utils/example_default_zaptel
index b08162d..f60b651 100644
--- a/xpp/utils/example_default_zaptel
+++ b/xpp/utils/example_default_zaptel
@@ -1,9 +1,9 @@
# Disables hotplug firmware loading
-XPP_HOTPLUG_DISABLED=yes
+#XPP_HOTPLUG_DISABLED=yes
#
# Disables udev hook called when an astribank is added and ready
# or removed.
-ASTRIBANK_HOOK_DISABLED=yes
+#ASTRIBANK_HOOK_DISABLED=yes
# Setup for XPP PRI. This allows to have fixed settings:
# 1. The variable XPP_PRI_SETUP contains a whitespace separated list of
diff --git a/xpp/utils/fpga_load.c b/xpp/utils/fpga_load.c
index e28f9a8..92e3c33 100644
--- a/xpp/utils/fpga_load.c
+++ b/xpp/utils/fpga_load.c
@@ -32,7 +32,7 @@ static char *progname;
#define MAX_HEX_LINES 10000
#define PACKET_SIZE 512
#define EEPROM_SIZE 16
-#define SERIAL_SIZE 8
+#define LABEL_SIZE 8
#define TIMEOUT 5000
@@ -99,7 +99,7 @@ struct myeeprom {
uint8_t release_major;
uint8_t release_minor;
uint8_t reserved;
- uint8_t serial[SERIAL_SIZE];
+ uint8_t label[LABEL_SIZE];
} PACKED;
struct fpga_packet_header {
@@ -255,12 +255,12 @@ void my_usb_device_cleanup(struct my_usb_device *mydev, const struct astribank_t
static void show_device_info(const struct my_usb_device *mydev)
{
const struct myeeprom *eeprom;
- uint8_t data[SERIAL_SIZE + 1];
+ uint8_t data[LABEL_SIZE + 1];
assert(mydev != NULL);
eeprom = &mydev->eeprom;
- memset(data, 0, SERIAL_SIZE + 1);
- memcpy(data, eeprom->serial, SERIAL_SIZE);
+ memset(data, 0, LABEL_SIZE + 1);
+ memcpy(data, eeprom->label, LABEL_SIZE);
printf("USB Firmware Type: [%s]\n", mydev->abtype->name);
printf("USB iManufacturer: [%s]\n", mydev->iManufacturer);
printf("USB iProduct: [%s]\n", mydev->iProduct);
@@ -269,7 +269,7 @@ static void show_device_info(const struct my_usb_device *mydev)
printf("EEPROM Vendor: 0x%04X\n", eeprom->vendor);
printf("EEPROM Product: 0x%04X\n", eeprom->product);
printf("EEPROM Release: %d.%03d\n", eeprom->release_major, eeprom->release_minor);
- printf("EEPROM Serial: HEX(%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X) [%s]\n",
+ printf("EEPROM Label: HEX(%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X) [%s]\n",
data[0], data[1], data[2], data[3],
data[4], data[5], data[6], data[7], data);
}
@@ -695,7 +695,7 @@ void usage()
fprintf(stderr, "\t\t[-V vendorid] # Set Vendor id on device\n");
fprintf(stderr, "\t\t[-P productid] # Set Product id on device\n");
fprintf(stderr, "\t\t[-R release] # Set Release. 2 dot separated decimals\n");
- fprintf(stderr, "\t\t[-S serial] # Set Serial. 8 comma separated numbers\n");
+ fprintf(stderr, "\t\t[-L label] # Set label.\n");
#endif
exit(1);
}
@@ -715,7 +715,7 @@ static void eeprom_fill(struct myeeprom *myeeprom,
const char vendor[],
const char product[],
const char release[],
- const char serial[],
+ const char label[],
const char source[])
{
// FF: address source is from device. C0: from eeprom
@@ -735,10 +735,10 @@ static void eeprom_fill(struct myeeprom *myeeprom,
myeeprom->release_major = release_major;
myeeprom->release_minor = release_minor;
}
- if(serial) {
+ if(label) {
/* padding */
- memset(myeeprom->serial, 0, SERIAL_SIZE);
- memcpy(myeeprom->serial, serial, strlen(serial));
+ memset(myeeprom->label, 0, LABEL_SIZE);
+ memcpy(myeeprom->label, label, strlen(label));
}
}
#endif
@@ -763,7 +763,7 @@ int main(int argc, char *argv[])
char *source = NULL;
char *product = NULL;
char *release = NULL;
- char *serial = NULL;
+ char *label = NULL;
const char options[] = "rib:D:ghH:I:vw:C:V:P:R:S:";
#else
const char options[] = "rib:D:ghH:I:vw:";
@@ -828,22 +828,22 @@ int main(int argc, char *argv[])
release = optarg;
break;
case 'S':
- serial = optarg;
+ label = optarg;
{
const char GOOD_CHARS[] =
"abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"0123456789"
"-_.";
- int len = strlen(serial);
- int goodlen = strspn(serial, GOOD_CHARS);
+ int len = strlen(label);
+ int goodlen = strspn(label, GOOD_CHARS);
- if(len > SERIAL_SIZE) {
- ERR("Serial number too long (%d > %d)\n", len, SERIAL_SIZE);
+ if(len > LABEL_SIZE) {
+ ERR("Label too long (%d > %d)\n", len, LABEL_SIZE);
usage();
}
if(goodlen != len) {
- ERR("Bad character in serial number (pos=%d)\n", goodlen);
+ ERR("Bad character in label number (pos=%d)\n", goodlen);
usage();
}
}
@@ -867,7 +867,7 @@ int main(int argc, char *argv[])
}
if(inhexfile) {
#ifdef XORCOM_INTERNAL
- if(vendor || product || release || serial || source ) {
+ if(vendor || product || release || label || source ) {
ERR("The -I option is exclusive of -[VPRSC]\n");
return 1;
}
@@ -896,7 +896,7 @@ int main(int argc, char *argv[])
}
}
#ifdef XORCOM_INTERNAL
- else if(vendor || product || release || serial || source ) {
+ else if(vendor || product || release || label || source ) {
if(outhexfile) {
FILE *fp;
@@ -907,7 +907,7 @@ int main(int argc, char *argv[])
return 1;
}
memset(&mydev.eeprom, 0, sizeof(struct myeeprom));
- eeprom_fill(&mydev.eeprom, vendor, product, release, serial, source);
+ eeprom_fill(&mydev.eeprom, vendor, product, release, label, source);
gen_hexline((uint8_t *)&mydev.eeprom, 0, sizeof(mydev.eeprom), fp);
gen_hexline(NULL, 0, 0, fp); /* EOF */
return 0;
@@ -935,8 +935,8 @@ int main(int argc, char *argv[])
goto dev_err;
}
#ifdef XORCOM_INTERNAL
- if(vendor || product || release || serial || source ) {
- eeprom_fill(&mydev.eeprom, vendor, product, release, serial, source);
+ if(vendor || product || release || label || source ) {
+ eeprom_fill(&mydev.eeprom, vendor, product, release, label, source);
opt_write_eeprom = 1;
opt_read_eeprom = 1;
}
diff --git a/xpp/utils/genzaptelconf b/xpp/utils/genzaptelconf
index 47ef409..8cbf3ed 100755
--- a/xpp/utils/genzaptelconf
+++ b/xpp/utils/genzaptelconf
@@ -104,6 +104,13 @@ ZAPBRI_SIGNALLING=bri_ptmp
#ZAPBRI_SIGNALLING=pri
zapconf_def_termtype=te
+# A command to stop / start asterisk. Must support parameters "start"
+# and "stop" . This is the executable:
+ZAPCONF_ASTERISK_SCRIPT=/etc/init.d/asterisk
+#
+# Should you need to pass extra arguments:
+ZAPCONF_ASTERISK_CMD=$ZAPCONF_ASTERISK_SCRIPT
+
# read default configuration from /etc/default/zaptel
if [ -r $ZAPTEL_BOOT_DEBIAN ]; then . $ZAPTEL_BOOT_DEBIAN; fi
if [ -r $ZAPTEL_BOOT_FEDORA ]; then . $ZAPTEL_BOOT_FEDORA; fi
@@ -1110,7 +1117,7 @@ defaultzone=$loadzone
# make sure asterisk is not in our way
if [ "$force_stop_ast" = 'yes' ]
then
- /etc/init.d/asterisk stop 1>&2
+ $ZAPCONF_ASTERISK_CMD stop 1>&2
else
# if asterisk is running and we wanted to detect modules
# or simply to unload modules, asterisk needs to go away.
@@ -1166,9 +1173,9 @@ then
exit_cleanup 0
fi
-if [ -x /etc/init.d/asterisk ]
+if [ -x "$ZAPCONF_ASTERISK_SCRIPT" ]
then
- /etc/init.d/asterisk start 1>&2
+ $ZAPCONF_ASTERISK_CMD start 1>&2
fi
# if in verbose mode: verify that asterisk is running
diff --git a/xpp/utils/hexfile.c b/xpp/utils/hexfile.c
index 1493199..2a01b3f 100644
--- a/xpp/utils/hexfile.c
+++ b/xpp/utils/hexfile.c
@@ -394,7 +394,7 @@ void process_comment(struct hexdata *hexdata, char buf[])
if((p = strchr(p, ' ')) == NULL)
return;
p++;
- strncpy(hexdata->version_info, p, BUFSIZ - 1);
+ snprintf(hexdata->version_info, BUFSIZ, "%s", p);
if((p = strchr(hexdata->version_info, ' ')) != NULL)
*p = '\0';
}
diff --git a/xpp/utils/test_parse.c b/xpp/utils/test_parse.c
index c98ca83..8ac2023 100644
--- a/xpp/utils/test_parse.c
+++ b/xpp/utils/test_parse.c
@@ -28,7 +28,7 @@ int main(int argc, char *argv[])
return 1;
}
fprintf(stderr, "=== %s === (version: %s)\n", argv[i], hd->version_info);
- dump_hexfile2(hd, stdout, 60 );
+ dump_hexfile2(hd, "-", 60 );
free_hexdata(hd);
}
return 0;
diff --git a/xpp/utils/xpp_blink b/xpp/utils/xpp_blink
index 65be247..8a96502 100755
--- a/xpp/utils/xpp_blink
+++ b/xpp/utils/xpp_blink
@@ -17,13 +17,13 @@ use Zaptel::Xpp;
use Zaptel::Xpp::Xbus;
sub usage {
- die "Usage: $0 {on|off|bzzt} {span <number> | xpd <bus num> [<xpd num>]}\n";
+ die "Usage: $0 {on|off|bzzt} {span <number> | xpd <bus num> [<xpd num>] | label <label>}\n";
}
my $state = shift;
my $selector = shift;
usage unless defined($state) and $state =~ /^(on|off|bzzt)$/;
-usage unless defined($selector) and $selector =~ /^(span|xpd)$/i;
+usage unless defined($selector) and $selector =~ /^(span|xpd|label)$/i;
my $xpd;
my @xpds;
@@ -58,6 +58,13 @@ if($selector =~ /^span$/i) {
@xpds = $xbus->xpds;
die "XBUS number $busnum has no XPDS!\n" unless @xpds;
}
+} elsif($selector =~ /^label$/i) {
+ my $label = shift;
+ usage unless defined($label);
+ my $xbus = Zaptel::Xpp::Xbus::by_label($label);
+ die "Unkown XBUS label $label\n" unless defined $xbus;
+ @xpds = $xbus->xpds;
+ die "XBUS label '$label' has no XPDS!\n" unless @xpds;
}
if($state eq 'on') {
@@ -107,6 +114,8 @@ Blink all the leds of an XPD.
=item xpd Select by xbus + xpd numbers. If only xbus number is given, all the
XPDs of the selected xbus (Astribank) are blinked.
+=item label Select by xbus label. Affect the whole Astribank.
+
=back
=head1 EXAMPLES
@@ -114,6 +123,8 @@ Blink all the leds of an XPD.
$ xpp_blink bzzt span 2
Using XBUS-04/XPD-10 (connected via usb-0000:00:1d.7-1): channels 15 16 17 18 19 20 21 22
- $ xpp_blink xpd 0 1
+ $ xpp_blink on xpd 0 1
+
+ $ xpp_blink off xpd 0
- $ xpp_blink xpd 0
+ $ xpp_blink bzzt label 'usb:QA-02'
diff --git a/xpp/utils/xpp_fxloader b/xpp/utils/xpp_fxloader
index 27eec1c..dbe5b98 100644
--- a/xpp/utils/xpp_fxloader
+++ b/xpp/utils/xpp_fxloader
@@ -178,7 +178,7 @@ udev)
;;
reset)
# TODO: does the use of wildcards here work?
- reset_fpga e4e4 '11[345][12]'
+ reset_fpga e4e4 '11[3456][12]'
;;
xppdetect|load|usb)
echo "--------- FIRMWARE LOADING: ($1)"
@@ -186,11 +186,13 @@ xppdetect|load|usb)
load_fw e4e4 1130 $USB_FW
load_fw e4e4 1140 $USB_FW
load_fw e4e4 1150 $USB_FW
+ load_fw e4e4 1160 $USB_FW
if [ "$1" != 'usb' ]
then
load_fpga e4e4 1131 FPGA_FXS.hex
load_fpga e4e4 1141 FPGA_1141.hex
load_fpga e4e4 1151 FPGA_1151.hex
+ load_fpga e4e4 1161 FPGA_1161.hex
fi
sleep 3 # Let it stabilize
diff --git a/xpp/utils/xpp_fxloader.usermap b/xpp/utils/xpp_fxloader.usermap
index 70ca68a..8c14b72 100644
--- a/xpp/utils/xpp_fxloader.usermap
+++ b/xpp/utils/xpp_fxloader.usermap
@@ -6,3 +6,5 @@ xpp_fxloader 0x0003 0xe4e4 0x1140 0x0000 0x0000 0x00 0x00 0x00 0x00 0x0
xpp_fxloader 0x0003 0xe4e4 0x1141 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0
xpp_fxloader 0x0003 0xe4e4 0x1150 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0
xpp_fxloader 0x0003 0xe4e4 0x1151 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0
+xpp_fxloader 0x0003 0xe4e4 0x1160 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0
+xpp_fxloader 0x0003 0xe4e4 0x1161 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x0
diff --git a/xpp/utils/xpp_sync b/xpp/utils/xpp_sync
index 3647fba..80b61c7 100755
--- a/xpp/utils/xpp_sync
+++ b/xpp/utils/xpp_sync
@@ -38,9 +38,8 @@ sub get_sorted_xpds() {
push(@good_xpds, $xpd);
}
}
-
- my @pri_nt_xpds = grep { $_->type eq 'PRI_NT'; } @good_xpds;
- my @pri_te_xpds = grep { $_->type eq 'PRI_TE'; } @good_xpds;
+ my @pri_nt_xpds = grep { $_->type =~ /(E1|T1|J1)_NT/; } @good_xpds;
+ my @pri_te_xpds = grep { $_->type =~ /(E1|T1|J1)_TE/; } @good_xpds;
my @bri_nt_xpds = grep { $_->type eq 'BRI_NT'; } @good_xpds;
my @bri_te_xpds = grep { $_->type eq 'BRI_TE'; } @good_xpds;
my @fxo_xpds = grep { $_->type eq 'FXO'; } @good_xpds;
@@ -74,10 +73,6 @@ sub do_select(@) {
print STDERR "Failed to set $busnum: $!\n";
}
}
- if(!$found) {
- print STDERR "Fall back to HOST sync\n";
- die "Failed to set HOST sync\n" unless Zaptel::Xpp::sync('HOST');
- }
}
sub do_set($) {
@@ -97,33 +92,12 @@ my @sync_xpds = unique_xbus(get_sorted_xpds());
sub show_sync() {
foreach my $xpd (@sync_xpds) {
my $xbus = $xpd->xbus;
- my @xpds = $xbus->xpds;
- my @types = map { $_->type } @xpds;
+ my $xpdstr = '[ ' . $xbus->pretty_xpds . ' ]';
+ my $label = '[' . $xbus->label() . ']';
+ my $connector = '(' . $xbus->connector . ')';
my $mark = ($curr_sync =~ /\d+/ and $xbus->num == $curr_sync)?"+":"";
- my $xpdstr = '';
- my @xpd_types = map { $_->type } sort { $a->num <=> $b->num } @xpds;
- my $last_type = '';
- my $mult = 0;
- foreach my $curr (@xpd_types) {
- if(!$last_type || ($curr eq $last_type)) {
- $mult++;
- } else {
- if($mult == 1) {
- $xpdstr .= "$last_type ";
- } elsif($mult) {
- $xpdstr .= "$last_type*$mult ";
- }
- $mult = 1;
- }
- $last_type = $curr;
- }
- if($mult == 1) {
- $xpdstr .= "$last_type ";
- } elsif($mult) {
- $xpdstr .= "$last_type*$mult ";
- }
my $padding = ' ' x (40 - length $xpdstr);
- printf " %1s %s [ %s]%s (%s)\n", $mark, $xbus->name, $xpdstr, $padding, $xbus->connector;
+ printf " %1s %s %-25s %-14s %s\n", $mark, $xbus->name, $connector, $label, $xpdstr;
}
}
@@ -134,12 +108,12 @@ sub check_fxo_host_sync() {
my @bad_xbus = map { $_->xbus } unique_xbus(@host_synced_fxos);
our $lines = join("\n\t", map { $_->name } @bad_xbus);
print STDERR <<"END";
-=========================================
-WARNING: FXO with HOST SYNC cause bad PCM
+==================================================
+WARNING: FXO which is not the syncer cause bad PCM
Affected Astribanks are:
------------------------------------------
+--------------------------------------------------
$lines
-=========================================
+==================================================
END
}
}
@@ -177,7 +151,7 @@ other Astribank devices.
When run without parameters, xpp_sync will display a list of Astribanks
(xbuses) that are connected and registered as Zaptel spans. The current
-xpp sync master will be marked (if it is not HOST).
+xpp sync master will be marked.
If you this an Astribank is connected and yet it does not appear on the
output of xpp_sync, it may be unregistered. Try running zt_registration .
@@ -188,11 +162,7 @@ output of xpp_sync, it may be unregistered. Try running zt_registration .
=item auto
-Automatically selects the best Astribank for syncing (with HOST fallback).
-
-=item host
-
-Set HOST synchronization (XPP timers).
+Automatically selects the best Astribank for syncing.
=item nn
@@ -202,14 +172,17 @@ Set XBUS number nn as sync source.
=head2 Example output:
- Current sync: 02
+ Setting SYNC
+ Current sync: 01
Best Available Syncers:
- + XBUS-02 [ FXS*3 FXO ] (usb-0000:00:1d.7-3)
- XBUS-04 [ FXS*4 ] (usb-0000:00:1d.7-1)
- XBUS-03 [ FXS*4 ] (usb-0000:00:1d.7-2)
- XBUS-01 [ FXS*4 ] (usb-0000:00:1d.7-4)
- XBUS-00 [ FXS*4 ] (usb-0000:00:1d.7-5)
- XBUS-05 [ FXS*4 ] (usb-0000:00:1d.7-6)
+ + XBUS-01 (usb-0000:00:10.4-3) [usb:12345678] [ PRI_TE PRI_NT PRI_TE PRI_NT ]
+ XBUS-00 (usb-0000:00:10.4-2) [usb:QA-01] [ FXS FXO ]
+ ==================================================
+ WARNING: FXO which is not the syncer cause bad PCM
+ Affected Astribanks are:
+ --------------------------------------------------
+ XBUS-00
+ ==================================================
In this example we see that the recommended xpp sync master is XBUS-02 -
it is the first on the list. It is also the actual syncer, as we can see
diff --git a/xpp/utils/zapconf b/xpp/utils/zapconf
index 1144684..196e57a 100755
--- a/xpp/utils/zapconf
+++ b/xpp/utils/zapconf
@@ -22,19 +22,27 @@ my %default_context = (
OUT => 'astbank-output',
BRI_TE => 'from-pstn',
BRI_NT => 'from-internal',
- PRI_TE => 'from-pstn',
- PRI_NT => 'from-internal',
+ E1_TE => 'from-pstn',
+ T1_TE => 'from-pstn',
+ J1_TE => 'from-pstn',
+ E1_NT => 'from-internal',
+ T1_NT => 'from-internal',
+ J1_NT => 'from-internal',
);
my %default_group = (
FXO => 0,
- FXS => 5,
- IN => 5, # FIXME: no need for group?
- OUT => 5, # FIXME: no need for group?
+ FXS => "5",
+ IN => '',
+ OUT => '',
BRI_TE => 0,
- BRI_NT => 5,
- PRI_TE => 0,
- PRI_NT => 5,
+ BRI_NT => 6,
+ E1_TE => 0,
+ T1_TE => 0,
+ J1_TE => 0,
+ E1_NT => 6,
+ T1_NT => 6,
+ J1_NT => 6,
);
my $fxs_default_start = 'ls';
@@ -151,7 +159,7 @@ sub gen_zaptel_signalling($) {
my $type = $chan->type;
my $num = $chan->num;
- die "channel $num type $type is not an analog channel\n" if $chan->is_digital();
+ die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
if($type eq 'EMPTY') {
printf "# channel %d, %s, no module.\n", $num, $chan->fqn;
return;
@@ -264,7 +272,7 @@ sub gen_zapata_channel($) {
my $chan = shift || die;
my $type = $chan->type;
my $num = $chan->num;
- die "channel $num type $type is not an analog channel\n" if $chan->is_digital();
+ die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
my $exten = $base_exten + $num;
my $sig = $default_zapata_signalling{$type};
my $context = $default_context{$type};
@@ -343,7 +351,7 @@ sub gen_users_channel($) {
my $chan = shift || die;
my $type = $chan->type;
my $num = $chan->num;
- die "channel $num type $type is not an analog channel\n" if $chan->is_digital();
+ die "channel $num type $type is not an analog channel\n" if $chan->span->is_digital();
my $exten = $base_exten + $num;
my $sig = $default_zapata_signalling{$type};
my $full_name = "$type $num";
@@ -379,6 +387,14 @@ allow = all
EOF
}
+# generate users.conf . The specific users.conf is strictly oriented
+# towards using with the asterisk-gui .
+#
+# This code could have generated a much simpler and smaller
+# configuration file, had there been minimal level of support for
+# configuration templates in the asterisk configuration rewriting. Right
+# now Asterisk's configuration rewriting simply freaks out in the face
+# of templates: http://bugs.digium.com/11442 .
sub gen_usersconf($) {
my $file = shift || die;
rename "$file", "$file.bak"
diff --git a/xpp/utils/zaptel_drivers b/xpp/utils/zaptel_drivers
index 5cd890d..d7904c0 100755
--- a/xpp/utils/zaptel_drivers
+++ b/xpp/utils/zaptel_drivers
@@ -5,5 +5,5 @@ BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
use Zaptel::Hardware;
-Zaptel::Hardware->scan_hardware();
-print join("\n", Zaptel::Hardware->drivers),"\n";
+my $hardware = Zaptel::Hardware->scan;
+print join("\n", $hardware->drivers),"\n";
diff --git a/xpp/utils/zaptel_hardware b/xpp/utils/zaptel_hardware
index 473be1f..a356f2c 100755
--- a/xpp/utils/zaptel_hardware
+++ b/xpp/utils/zaptel_hardware
@@ -9,6 +9,7 @@
#
use strict;
use File::Basename;
+use Getopt::Std;
BEGIN { my $dir = dirname($0); unshift(@INC, "$dir", "$dir/zconf"); }
use Zaptel;
@@ -18,23 +19,23 @@ use Zaptel::Xpp::Xbus;
use Zaptel::Hardware;
sub usage {
- die "Usage: $0\n";
+ die "Usage: $0 [-v][-x]\n";
}
+our ($opt_v, $opt_x);
+getopts('vx') || usage;
@ARGV == 0 or usage;
-Zaptel::Hardware->scan_hardware;
-
-my @hardware = Zaptel::Hardware->devices;
+my $hardware = Zaptel::Hardware->scan;
my @spans = Zaptel::spans;
sub show_xbus($) {
my $xbus = shift or die;
my @xpds = $xbus->xpds;
- my $serialnum = $xbus->serial();
+ my $label = '[' . $xbus->label() . ']';
my $connector = ($xbus->status eq 'CONNECTED') ? $xbus->connector : "MISSING";
- printf " SERIAL=%-10s CONNECTOR=%-20s\n", $serialnum, $connector;
- foreach my $xpd (sort { $a->num <=> $b->num } @xpds) {
+ printf " LABEL=%-20s CONNECTOR=%-20s\n", $label, $connector;
+ foreach my $xpd (@xpds) {
my $reg = $xpd->zt_registration;
my $span;
my $spanstr;
@@ -45,7 +46,7 @@ sub show_xbus($) {
$spanstr = "Unregistered";
}
my $master = '';
- $master = "XPP-SYNC" if $xpd->is_sync_master;
+ #$master = "XPP-SYNC" if $xpd->is_sync_master;
$master .= " ZAPTEL-SYNC" if defined($span) && $span->is_zaptel_sync_master;
printf "\t%-10s: %-8s %s %s\n", $xpd->fqn, $xpd->type, $spanstr, $master;
}
@@ -54,31 +55,41 @@ sub show_xbus($) {
my %seen;
my $format = "%-20s %-12s %4s:%4s %s\n";
-foreach my $dev (@hardware) {
- my $xbus = $dev->xbus;
+sub show_disconnected(%) {
+ my %seen = @_;
+
+ my $notified_lost = 0;
+ foreach my $xbus (Zaptel::Xpp::xbuses('SORT_CONNECTOR')) {
+ if(!$seen{$xbus->name}) {
+ print "----------- XPP Spans with disconnected hardware -----------\n"
+ unless $notified_lost++;
+ printf($format, $xbus->name, '', '', '', "NO HARDWARE");
+ show_xbus($xbus) if $opt_v;
+ }
+ }
+}
+
+foreach my $dev ($hardware->device_list) {
my $driver = $dev->driver || "";
- my $loaded = $dev->loaded;
+ my $xbus;
+ my $loaded;
+ if($dev->is_astribank) {
+ $xbus = $dev->xbus;
+ $loaded = $dev->loaded;
+ }
die "driver should be '$driver' but is actually '$loaded'"
if defined($loaded) && $driver ne $loaded;
$driver = "$driver" . (($loaded) ? "+" : "-");
my $description = $dev->description || "";
printf $format, $dev->hardware_name, $driver, $dev->vendor, $dev->product, $description;
- if(!$xbus) {
+ if(!defined $xbus || !$xbus) {
next;
}
$seen{$xbus->name} = 1;
- show_xbus($xbus);
+ show_xbus($xbus) if $opt_v;
}
-my $notified_lost = 0;
-foreach my $xbus (Zaptel::Xpp::xbuses('SORT_CONNECTOR')) {
- if(!$seen{$xbus->name}) {
- print "----------- XPP Spans with disconnected hardware -----------\n"
- unless $notified_lost++;
- printf $format, $xbus->name, '', '', "NO HARDWARE";
- show_xbus($xbus);
- }
-}
+show_disconnected(%seen) if $opt_x;
__END__
@@ -88,7 +99,22 @@ zaptel_hardware - Shows Zaptel hardware devices.
=head1 SYNOPSIS
-zaptel_hardware
+zaptel_hardware [-v][-x]
+
+=head1 OPTIONS
+
+=over
+
+=item -v
+
+Verbose ouput - show spans used by each device etc. Currently only
+implemented for the Xorcom Astribank.
+
+=item -x
+
+Show disconnected Astribank unit, if any.
+
+=back
=head1 DESCRIPTION
@@ -116,20 +142,23 @@ Without drivers loaded:
usb:001/003 xpp_usb- e4e4:1152 Astribank-multi FPGA-firmware
pci:0000:01:0b.0 wctdm- e159:0001 Wildcard TDM400P REV H
-With drivers loaded:
+With drivers loaded, without -v:
+ usb:001/002 xpp_usb+ e4e4:1152 Astribank-multi FPGA-firmware
+ usb:001/003 xpp_usb+ e4e4:1152 Astribank-multi FPGA-firmware
+ pci:0000:01:0b.0 wctdm+ e159:0001 Wildcard TDM400P REV E/F
+With drivers loaded, with -v:
usb:001/002 xpp_usb+ e4e4:1152 Astribank-multi FPGA-firmware
- SERIAL=[usb:123] CONNECTOR=usb-0000:00:1d.7-1
+ LABEL=[usb:123] CONNECTOR=usb-0000:00:1d.7-1
XBUS-00/XPD-00: FXS Span 2
XBUS-00/XPD-10: FXS Span 3
XBUS-00/XPD-20: FXS Span 4
XBUS-00/XPD-30: FXS Span 5
usb:001/003 xpp_usb+ e4e4:1152 Astribank-multi FPGA-firmware
- SERIAL=[usb:4567] CONNECTOR=usb-0000:00:1d.7-4
+ LABEL=[usb:4567] CONNECTOR=usb-0000:00:1d.7-4
XBUS-01/XPD-00: FXS Span 6 XPP-SYNC
XBUS-01/XPD-10: FXO Span 7
XBUS-01/XPD-20: FXO Span 8
XBUS-01/XPD-30: FXO Span 9
pci:0000:01:0b.0 wctdm+ e159:0001 Wildcard TDM400P REV E/F
-
diff --git a/xpp/utils/zconf/XppUtils.pm b/xpp/utils/zconf/XppUtils.pm
new file mode 100644
index 0000000..1526537
--- /dev/null
+++ b/xpp/utils/zconf/XppUtils.pm
@@ -0,0 +1,52 @@
+package XppUtils;
+
+# Accessors (miniperl does not have Class:Accessor)
+our $AUTOLOAD;
+sub AUTOLOAD {
+ my $self = shift;
+ my $name = $AUTOLOAD;
+ $name =~ s/.*://; # strip fully-qualified portion
+ return if $name =~ /^[A-Z_]+$/; # ignore special methods (DESTROY)
+ my $key = uc($name);
+ my $val = shift;
+ if (defined $val) {
+ #print STDERR "set: $key = $val\n";
+ return $self->{$key} = $val;
+ } else {
+ if(!exists $self->{$key}) {
+ #$self->xpp_dump;
+ #die "Trying to get uninitialized '$key'";
+ }
+ my $val = $self->{$key};
+ #print STDERR "get: $key ($val)\n";
+ return $val;
+ }
+}
+
+sub xpp_dump($) {
+ my $self = shift || die;
+ printf STDERR "Dump a %s\n", ref($self);
+ foreach my $k (sort keys %{$self}) {
+ my $val = $self->{$k};
+ $val = '**UNDEF**' if !defined $val;
+ printf STDERR " %-20s %s\n", $k, $val;
+ }
+}
+
+# Based on Autoloader
+
+sub import {
+ my $pkg = shift;
+ my $callpkg = caller;
+
+ #print STDERR "import: $pkg, $callpkg\n";
+ #
+ # Export symbols, but not by accident of inheritance.
+ #
+ die "Sombody inherited XppUtils" if $pkg ne 'XppUtils';
+ no strict 'refs';
+ *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD;
+ *{ $callpkg . '::xpp_dump' } = \&xpp_dump;
+}
+
+1;
diff --git a/xpp/utils/zconf/Zaptel.pm b/xpp/utils/zconf/Zaptel.pm
index 3717e72..e9d0529 100644
--- a/xpp/utils/zconf/Zaptel.pm
+++ b/xpp/utils/zconf/Zaptel.pm
@@ -10,8 +10,36 @@ package Zaptel;
use strict;
use Zaptel::Span;
+=head1 NAME
+
+Zaptel - Perl interface to Zaptel information
+
+This package allows access from perl to information about Zaptel
+hardware and loaded Zaptel devices.
+
+=head1 SYNOPSIS
+
+ # Listing channels in analog spans:
+ use Zaptel;
+ # scans system:
+ my @xbuses = Zaptel::spans();
+ for my $span (@spans) {
+ next if ($span->is_digital);
+ $span->num. " - [". $span->type ."] ". $span->name. "\n";
+ for my $chan ($span->chans) {
+ print " - ".$chan->num . " - [". $chan->type. "] ". $chan->fqn". \n";
+ }
+ }
+=cut
+
my $proc_base = "/proc/zaptel";
+=head1 spans()
+
+Returns a list of span objects, ordered by span number.
+
+=cut
+
sub spans() {
my @spans;
@@ -21,7 +49,20 @@ sub spans() {
my $span = Zaptel::Span->new($zfile);
push(@spans, $span);
}
- return sort { $a->num <=> $b->num } @spans;
+ @spans = sort { $a->num <=> $b->num } @spans;
+ return @spans;
}
+=head1 SEE ALSO
+
+Span objects: L<Zaptel::Span>.
+
+Zaptel channels objects: L<Zaptel::Chan>.
+
+Zaptel hardware devices information: L<Zaptel::Hardware>.
+
+Xorcom Astribank -specific information: L<Zaptel::Xpp>.
+
+=cut
+
1;
diff --git a/xpp/utils/zconf/Zaptel/Chans.pm b/xpp/utils/zconf/Zaptel/Chans.pm
index f105a8c..236d6af 100644
--- a/xpp/utils/zconf/Zaptel/Chans.pm
+++ b/xpp/utils/zconf/Zaptel/Chans.pm
@@ -8,34 +8,30 @@ package Zaptel::Chans;
# $Id$
#
use strict;
-
-# Accessors (miniperl does not have Class:Accessor)
-our $AUTOLOAD;
-sub AUTOLOAD {
- my $self = shift;
- my $name = uc($AUTOLOAD);
- $name =~ s/.*://; # strip fully-qualified portion
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
-}
+use XppUtils;
sub new($$$$$$) {
my $pack = shift or die "Wasn't called as a class method\n";
my $span = shift or die "Missing a span parameter\n";
- my $num = shift or die "Missing a channel number parameter\n";
- my $fqn = shift or die "Missing a channel fqn parameter\n";
- my $signalling = shift || '';
- my $info = shift || '';
+ my $line = shift or die "Missing an input line\n";
+ my ($num, $fqn, $rest) = split(/\s+/, $line, 3);
+ $num or die "Missing a channel number parameter\n";
+ $fqn or die "Missing a channel fqn parameter\n";
+ my $signalling = '';
+ if(defined $rest && ($rest =~ s/(\w+)//)) {
+ $signalling = $1;
+ }
+ my $info = '';
+ if(defined $rest && ($rest =~ s/(.*)//)) {
+ $info = $1;
+ }
my $self = {};
bless $self, $pack;
- $self->span($span);
- $self->num($num);
- $self->fqn($fqn);
- $self->signalling($signalling);
- $self->info($info);
+ $self->{SPAN} = $span;
+ $self->{NUM} = $num;
+ $self->{FQN} = $fqn;
+ $self->{SIGNALLING} = $signalling;
+ $self->{INFO} = $info;
my $type;
if($fqn =~ m|\bXPP_(\w+)/.*$|) {
$type = $1; # One of our AB
diff --git a/xpp/utils/zconf/Zaptel/Hardware.pm b/xpp/utils/zconf/Zaptel/Hardware.pm
index 8423c18..5af22f7 100644
--- a/xpp/utils/zconf/Zaptel/Hardware.pm
+++ b/xpp/utils/zconf/Zaptel/Hardware.pm
@@ -11,33 +11,35 @@ use strict;
use Zaptel::Hardware::USB;
use Zaptel::Hardware::PCI;
-my @zaptel_devices;
-
sub device_detected($$) {
my $dev = shift || die;
my $name = shift || die;
- warn "Device '$name' already known\n"
- if grep { $_->hardware_name eq $name } @zaptel_devices;
+ die unless defined $dev->{'BUS_TYPE'};
+ $dev->{IS_ASTRIBANK} = 0 unless defined $dev->{'IS_ASTRIBANK'};
$dev->{'HARDWARE_NAME'} = $name;
- push(@zaptel_devices, $dev);
}
sub device_removed($) {
my $dev = shift || die;
my $name = $dev->hardware_name;
die "Missing zaptel device hardware name" unless $name;
- @zaptel_devices = grep { $_->hardware_name ne $name } @zaptel_devices;
}
-sub devices($) {
- my $pack = shift || die;
+sub device_list($) {
+ my $self = shift || die;
+ my @types = @_;
+ my @list;
- return @zaptel_devices;
+ @types = qw(USB PCI) unless @types;
+ foreach my $t (@types) {
+ @list = ( @list, @{$self->{$t}} );
+ }
+ return @list;
}
sub drivers($) {
- my $pack = shift or die "Wasn't called as a class method\n";
- my @devs = $pack->devices();
+ my $self = shift || die;
+ my @devs = $self->device_list;
my @drvs = map { $_->{DRIVER} } @devs;
# Make unique
my %drivers;
@@ -45,11 +47,14 @@ sub drivers($) {
return sort keys %drivers;
}
-sub scan_hardware($) {
+sub scan($) {
my $pack = shift || die;
+ my $self = {};
+ bless $self, $pack;
- Zaptel::Hardware::USB->scan_devices;
- Zaptel::Hardware::PCI->scan_devices;
+ $self->{USB} = [ Zaptel::Hardware::USB->devices ];
+ $self->{PCI} = [ Zaptel::Hardware::PCI->scan_devices ];
+ return $self;
}
1;
diff --git a/xpp/utils/zconf/Zaptel/Hardware/PCI.pm b/xpp/utils/zconf/Zaptel/Hardware/PCI.pm
index d471c1f..7d4e2b3 100644
--- a/xpp/utils/zconf/Zaptel/Hardware/PCI.pm
+++ b/xpp/utils/zconf/Zaptel/Hardware/PCI.pm
@@ -8,6 +8,7 @@ package Zaptel::Hardware::PCI;
# $Id$
#
use strict;
+use XppUtils;
use Zaptel::Hardware;
our @ISA = qw(Zaptel::Hardware);
@@ -45,9 +46,10 @@ my %pci_ids = (
'e159:0001/e16b' => { DRIVER => 'pciradio', DESCRIPTION => 'PCIRADIO' },
# from wcfxo
+ 'e159:0001/8084' => { DRIVER => 'wcfxo', DESCRIPTION => 'Wildcard X101P clone' },
'e159:0001/8085' => { DRIVER => 'wcfxo', DESCRIPTION => 'Wildcard X101P' },
- 'e159:0001/8086' => { DRIVER => 'wcfxo', DESCRIPTION => 'Generic Clone' },
- 'e159:0001/8087' => { DRIVER => 'wcfxo', DESCRIPTION => 'Generic Clone' },
+ 'e159:0001/8086' => { DRIVER => 'wcfxo', DESCRIPTION => 'Wildcard X101P clone' },
+ 'e159:0001/8087' => { DRIVER => 'wcfxo', DESCRIPTION => 'Wildcard X101P clone' },
'1057:5608' => { DRIVER => 'wcfxo', DESCRIPTION => 'Wildcard X100P' },
# from wct1xxp
@@ -104,25 +106,16 @@ my %pci_ids = (
'0b0b:0705' => { DRIVER => 'rcbfx', DESCRIPTION => 'Rhino R24FXS' },
'0b0b:0706' => { DRIVER => 'rcbfx', DESCRIPTION => 'Rhino RCB24FXO 24-Channel FXO analog telphony card' },
'0b0b:0906' => { DRIVER => 'rcbfx', DESCRIPTION => 'Rhino RCB24FXX 24-channel modular analog telphony card' },
+
+ # Sangoma cards (based on pci.ids)
+ '1923:0040' => { DRIVER => 'wanpipe', DESCRIPTION => 'Sangoma Technologies Corp. A200/Remora FXO/FXS Analog AFT card' },
+ '1923:0100' => { DRIVER => 'wanpipe', DESCRIPTION => 'Sangoma Technologies Corp. A104d QUAD T1/E1 AFT card' },
+ '1923:0300' => { DRIVER => 'wanpipe', DESCRIPTION => 'Sangoma Technologies Corp. A101 single-port T1/E1' },
+ '1923:0400' => { DRIVER => 'wanpipe', DESCRIPTION => 'Sangoma Technologies Corp. A104u Quad T1/E1 AFT' },
);
$ENV{PATH} .= ":/usr/sbin:/sbin:/usr/bin:/bin";
-# Accessors (miniperl does not have Class:Accessor)
-our $AUTOLOAD;
-sub AUTOLOAD {
- my $self = shift;
- my $name = uc($AUTOLOAD);
- $name =~ s/.*://; # strip fully-qualified portion
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
-}
-
-my @devices;
-
sub pci_sorter {
return $a->priv_device_name() cmp $b->priv_device_name();
}
@@ -136,11 +129,6 @@ sub new($$) {
return $self;
}
-sub devices($) {
- my $pack = shift or die "Wasn't called as a class method\n";
- return sort pci_sorter @devices;
-}
-
my %pci_devs;
sub readfile($) {
@@ -153,6 +141,8 @@ sub readfile($) {
}
sub scan_devices($) {
+ my @devices;
+
while(</sys/bus/pci/devices/*>) {
m,([^/]+)$,,;
my $name = $1;
@@ -182,6 +172,7 @@ sub scan_devices($) {
next unless defined $pci_ids{$key};
my $d = Zaptel::Hardware::PCI->new(
+ BUS_TYPE => 'PCI',
PRIV_DEVICE_NAME => $dev->{PRIV_DEVICE_NAME},
VENDOR => $dev->{VENDOR},
PRODUCT => $dev->{PRODUCT},
@@ -193,6 +184,8 @@ sub scan_devices($) {
);
push(@devices, $d);
}
+ @devices = sort pci_sorter @devices;
+ return @devices;
}
1;
diff --git a/xpp/utils/zconf/Zaptel/Hardware/USB.pm b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
index 4d87536..a5501d1 100644
--- a/xpp/utils/zconf/Zaptel/Hardware/USB.pm
+++ b/xpp/utils/zconf/Zaptel/Hardware/USB.pm
@@ -8,6 +8,7 @@ package Zaptel::Hardware::USB;
# $Id$
#
use strict;
+use XppUtils;
use Zaptel::Hardware;
use Zaptel::Xpp;
use Zaptel::Xpp::Xbus;
@@ -30,25 +31,14 @@ my %usb_ids = (
'e4e4:1150' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-multi no-firmware' },
'e4e4:1151' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-multi USB-firmware' },
'e4e4:1152' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-multi FPGA-firmware' },
+ 'e4e4:1160' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-modular no-firmware' },
+ 'e4e4:1161' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-modular USB-firmware' },
+ 'e4e4:1162' => { DRIVER => 'xpp_usb', DESCRIPTION => 'Astribank-modular FPGA-firmware' },
);
$ENV{PATH} .= ":/usr/sbin:/sbin:/usr/bin:/bin";
-# Accessors (miniperl does not have Class:Accessor)
-our $AUTOLOAD;
-sub AUTOLOAD {
- my $self = shift;
- my $name = uc($AUTOLOAD);
- $name =~ s/.*://; # strip fully-qualified portion
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
-}
-
-my @devices;
my @xbuses = Zaptel::Xpp::xbuses('SORT_CONNECTOR');
sub usb_sorter() {
@@ -59,7 +49,10 @@ sub xbus_of_usb($) {
my $priv_device_name = shift;
my $dev = shift;
- my ($wanted) = grep { $priv_device_name eq $_->usb_devname } @xbuses;
+ my ($wanted) = grep {
+ defined($_->usb_devname) &&
+ $priv_device_name eq $_->usb_devname
+ } @xbuses;
return $wanted;
}
@@ -71,6 +64,9 @@ sub new($$) {
if(defined $xbus) {
$self->{XBUS} = $xbus;
$self->{LOADED} = 'xpp_usb';
+ } else {
+ $self->{XBUS} = undef;
+ $self->{LOADED} = undef;
}
Zaptel::Hardware::device_detected($self,
sprintf("usb:%s", $self->{PRIV_DEVICE_NAME}));
@@ -78,36 +74,43 @@ sub new($$) {
}
sub devices($) {
- my $pack = shift or die "Wasn't called as a class method\n";
- return sort usb_sorter @devices;
-}
-
-sub scan_devices($) {
my $pack = shift || die;
my $usb_device_list = "/proc/bus/usb/devices";
return unless (-r $usb_device_list);
+ my @devices;
open(F, $usb_device_list) || die "Failed to open $usb_device_list: $!";
- $/ = '';
+ local $/ = '';
while(<F>) {
my @lines = split(/\n/);
my ($tline) = grep(/^T/, @lines);
my ($pline) = grep(/^P/, @lines);
+ my ($sline) = grep(/^S:.*SerialNumber=/, @lines);
my ($busnum,$devnum) = ($tline =~ /Bus=(\w+)\W.*Dev#=\s*(\w+)\W/);
my $devname = sprintf("%03d/%03d", $busnum, $devnum);
my ($vendor,$product) = ($pline =~ /Vendor=(\w+)\W.*ProdID=(\w+)\W/);
+ my $serial;
+ if(defined $sline) {
+ $sline =~ /SerialNumber=(.*)/;
+ $serial = $1;
+ #$serial =~ s/[[:^print:]]/_/g;
+ }
my $model = $usb_ids{"$vendor:$product"};
next unless defined $model;
my $d = Zaptel::Hardware::USB->new(
+ IS_ASTRIBANK => ($model->{DRIVER} eq 'xpp_usb')?1:0,
+ BUS_TYPE => 'USB',
PRIV_DEVICE_NAME => $devname,
VENDOR => $vendor,
PRODUCT => $product,
+ SERIAL => $serial,
DESCRIPTION => $model->{DESCRIPTION},
DRIVER => $model->{DRIVER},
);
push(@devices, $d);
}
close F;
+ @devices = sort usb_sorter @devices;
}
1;
diff --git a/xpp/utils/zconf/Zaptel/Span.pm b/xpp/utils/zconf/Zaptel/Span.pm
index 47a5a56..eacac8b 100644
--- a/xpp/utils/zconf/Zaptel/Span.pm
+++ b/xpp/utils/zconf/Zaptel/Span.pm
@@ -8,6 +8,7 @@ package Zaptel::Span;
# $Id$
#
use strict;
+use XppUtils;
use Zaptel::Chans;
my $proc_base = "/proc/zaptel";
@@ -17,19 +18,6 @@ sub chans($) {
return @{$span->{CHANS}};
}
-# Accessors (miniperl does not have Class:Accessor)
-our $AUTOLOAD;
-sub AUTOLOAD {
- my $self = shift;
- my $name = uc($AUTOLOAD);
- $name =~ s/.*://; # strip fully-qualified portion
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
-}
-
sub by_number($) {
my $span_number = shift;
die "Missing span number" unless defined $span_number;
@@ -47,7 +35,7 @@ my @bri_strings = (
);
my @pri_strings = (
- 'PRI_(NT|TE)'
+ '(E1|T1|J1)_(NT|TE)'
);
our $ZAPBRI_NET = 'bri_net';
@@ -65,6 +53,9 @@ sub new($$) {
open(F, "$proc_base/$num") or die "Failed to open '$proc_base/$num\n";
my $head = <F>;
chomp $head;
+ $self->{IS_DIGITAL} = 0;
+ $self->{IS_BRI} = 0;
+ $self->{IS_PRI} = 0;
foreach my $cardtype (@bri_strings) {
if($head =~ m/$cardtype/) {
$self->{IS_DIGITAL} = 1;
@@ -80,11 +71,17 @@ sub new($$) {
if($head =~ m/$cardtype/) {
$self->{IS_DIGITAL} = 1;
$self->{IS_PRI} = 1;
- $self->{TERMTYPE} = $1;
- $self->{TYPE} = "PRI_$1";
- {
- $self->{DCHAN_IDX} = 15; # Depends on E1/T1/J1
+ $self->{PROTO} = "$1";
+ $self->{TERMTYPE} = $2;
+ $self->{TYPE} = "$1_$2";
+ if($self->{PROTO} eq 'E1') {
+ $self->{DCHAN_IDX} = 15;
$self->{BCHAN_LIST} = [ 0 .. 14, 16 .. 30 ];
+ } elsif($self->{PROTO} eq 'T1') {
+ $self->{DCHAN_IDX} = 23;
+ $self->{BCHAN_LIST} = [ 0 .. 22 ];
+ } else {
+ die "'$self->{PROTO}' unsupported yet";
}
last;
}
@@ -100,8 +97,7 @@ sub new($$) {
s/^\s*//;
s/\s*$//;
next unless /\S/;
- my ($chan, $name, $signalling, $info) = split(/\s+/, $_, 4);
- my $c = Zaptel::Chans->new($self, $chan, $name, $signalling, $info);
+ my $c = Zaptel::Chans->new($self, $_);
push(@{$self->{CHANS}}, $c);
}
close F;
@@ -125,11 +121,19 @@ sub new($$) {
if($self->is_pri()) {
$self->{DCHAN} = ($self->chans())[$self->{DCHAN_IDX}];
$self->{BCHANS} = [ ($self->chans())[@{$self->{BCHAN_LIST}}] ];
- $self->{CODING} = 'hdb3';
+ if($self->{PROTO} eq 'E1') {
+ $self->{CODING} = 'hdb3';
+ $self->{FRAMING} = 'ccs';
+ $self->{SWITCHTYPE} = 'euroisdn';
+ } elsif($self->{PROTO} eq 'T1') {
+ $self->{CODING} = 'b8zs';
+ $self->{FRAMING} = 'esf';
+ $self->{SWITCHTYPE} = 'national';
+ } else {
+ die "'$self->{PROTO}' unsupported yet";
+ }
$self->{YELLOW} = undef;
- $self->{FRAMING} = 'ccs';
$self->{SIGNALLING} = ($self->{TERMTYPE} eq 'NT') ? $ZAPPRI_NET : $ZAPPRI_CPE ;
- $self->{SWITCHTYPE} = 'euroisdn';
}
return $self;
}
diff --git a/xpp/utils/zconf/Zaptel/Xpp.pm b/xpp/utils/zconf/Zaptel/Xpp.pm
index 3c4b52c..8a2a6eb 100644
--- a/xpp/utils/zconf/Zaptel/Xpp.pm
+++ b/xpp/utils/zconf/Zaptel/Xpp.pm
@@ -10,35 +10,89 @@ package Zaptel::Xpp;
use strict;
use Zaptel::Xpp::Xbus;
-my $proc_base = "/proc/xpp";
+=head1 NAME
+
+Zaptel::Xpp - Perl interface to the Xorcom Astribank drivers.
+
+=head1 SYNOPSIS
-# Static Functions
+ # Listing all Astribanks:
+ use Zaptel::Xpp;
+ # scans hardware:
+ my @xbuses = Zaptel::Xpp::xbuses("SORT_CONNECTOR");
+ for my $xbus (@xbuses) {
+ print $xbus->name." (".$xbus->label .", ". $xbus->connector .")\n";
+ for my $xpd ($xbus->xpds) {
+ print " - ".$xpd->fqn,"\n";
+ }
+ }
+=cut
+
+
+my $proc_base = "/proc/xpp";
# Nominal sorters for xbuses
sub by_name {
- return $a cmp $b;
+ return $a->name cmp $b->name;
}
sub by_connector {
return $a->connector cmp $b->connector;
}
-sub by_serial {
- my $cmp = $a->serial cmp $b->serial;
+sub by_label {
+ my $cmp = $a->label cmp $b->label;
return $cmp if $cmp != 0;
return $a->connector cmp $b->connector;
}
+=head1 xbuses([sort_order])
+
+Scans system (/proc and /sys) and returns a list of Astribank (Xbus)
+objects. The optional parameter sort_order is the order in which
+the Astribanks will be returns:
+
+=over
+
+=item SORT_CONNECTOR
+
+Sort by the connector string. For USB this defines the "path" to get to
+the device through controllers, hubs etc.
+
+=item SORT_LABEL
+
+Sorts by the label of the Astribank. The label field is unique to the
+Astribank. It can also be viewed through 'lsusb -v' without the drivers
+loaded (the iSerial field in the Device Descriptor).
+
+=item SORT_NAME
+
+Sort by the "name". e.g: "XBUS-00". The order of Astribank names depends
+on the load order, and hence may change between different runs.
+
+=item custom function
+
+Instead of using a predefined sorter, you can pass your own sorting
+function. See the example sorters in the code of this module.
+
+=back
+
+=cut
+
sub xbuses {
- my $optsort = shift || 'SORT_NAME';
+ my $optsort = shift || 'SORT_CONNECTOR';
my @xbuses;
- -d "/proc/xpp" or return ();
+ -d "$proc_base" or return ();
+ my @lines;
+ local $/ = "\n";
open(F, "$proc_base/xbuses") ||
die "$0: Failed to open $proc_base/xbuses: $!\n";
- while(<F>) {
- chomp;
- my ($name, @attr) = split;
+ @lines = <F>;
+ close F;
+ foreach my $line (@lines) {
+ chomp $line;
+ my ($name, @attr) = split(/\s+/, $line);
$name =~ s/://;
$name =~ /XBUS-(\d\d)/ or die "Bad XBUS number: $name";
my $num = $1;
@@ -46,20 +100,20 @@ sub xbuses {
my $xbus = Zaptel::Xpp::Xbus->new(NAME => $name, NUM => $num, @attr);
push(@xbuses, $xbus);
}
- close F;
my $sorter;
if($optsort eq "SORT_CONNECTOR") {
$sorter = \&by_connector;
} elsif($optsort eq "SORT_NAME") {
$sorter = \&by_name;
- } elsif($optsort eq "SORT_SERIAL") {
- $sorter = \&by_serial;
+ } elsif($optsort eq "SORT_LABEL") {
+ $sorter = \&by_label;
} elsif(ref($optsort) eq 'CODE') {
$sorter = $optsort;
} else {
die "Unknown optional sorter '$optsort'";
}
- return sort $sorter @xbuses;
+ @xbuses = sort $sorter @xbuses;
+ return @xbuses;
}
sub xpd_of_span($) {
@@ -73,6 +127,16 @@ sub xpd_of_span($) {
return undef;
}
+=head1 sync([new_sync_source])
+
+Gets (and optionally sets) the internal Astribanks synchronization
+source. When used to set sync source, returns the original sync source.
+
+A synchronization source is a value valid writing into /proc/xpp/sync .
+For more information read that file and see README.Astribank .
+
+=cut
+
sub sync {
my $newsync = shift;
my $result;
@@ -94,17 +158,26 @@ sub sync {
}
close F;
if(defined($newsync)) { # Now change
- open(F, ">$file") or die "Failed to open $file for writing: $!";
- if($newsync eq 'HOST') {
- print F "HOST";
- } elsif($newsync =~ /^(\d+)$/) {
- print F ($newapi)? "SYNC=$1" : "$1 0";
- } else {
+ $newsync =~ s/.*/\U$&/;
+ if($newsync =~ /^(\d+)$/) {
+ $newsync = ($newapi)? "SYNC=$1" : "$1 0";
+ } elsif($newsync ne 'ZAPTEL') {
die "Bad sync parameter '$newsync'";
}
+ open(F, ">$file") or die "Failed to open $file for writing: $!";
+ print F $newsync;
close(F) or die "Failed in closing $file: $!";
}
return $result;
}
+=head1 SEE ALSO
+
+For the documentation of xbus objects, see L<Zaptel::Xpp::Xbus>. For
+information about XPD objects, see L<Zaptel::Xpp::Xpd>.
+
+General documentation can be found in the master package L<Zaptel>.
+
+=cut
+
1;
diff --git a/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm b/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
index 7951d98..57c93f5 100644
--- a/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
+++ b/xpp/utils/zconf/Zaptel/Xpp/Xbus.pm
@@ -8,23 +8,11 @@ package Zaptel::Xpp::Xbus;
# $Id$
#
use strict;
+use XppUtils;
use Zaptel::Xpp::Xpd;
my $proc_base = "/proc/xpp";
-# Accessors (miniperl does not have Class:Accessor)
-our $AUTOLOAD;
-sub AUTOLOAD {
- my $self = shift;
- my $name = uc($AUTOLOAD);
- $name =~ s/.*://; # strip fully-qualified portion
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
-}
-
sub xpds($) {
my $xbus = shift;
return @{$xbus->{XPDS}};
@@ -39,17 +27,27 @@ sub by_number($) {
return $xbus;
}
+sub by_label($) {
+ my $label = shift;
+ die "Missing xbus label parameter" unless defined $label;
+ my @xbuses = Zaptel::Xpp::xbuses();
+
+ my ($xbus) = grep { $_->label eq $label } @xbuses;
+ return $xbus;
+}
+
sub get_xpd_by_number($$) {
my $xbus = shift;
- my $xpdnum = shift;
- die "Missing XPD number parameter" unless defined $xpdnum;
+ my $xpdid = shift;
+ die "Missing XPD id parameter" unless defined $xpdid;
my @xpds = $xbus->xpds;
- return $xpds[$xpdnum];
+ return $xpds[$xpdid];
}
sub new($$) {
my $pack = shift or die "Wasn't called as a class method\n";
my $self = {};
+ bless $self, $pack;
while(@_) {
my ($k, $v) = @_;
shift; shift;
@@ -61,7 +59,13 @@ sub new($$) {
}
$self->{$k} = $v;
}
- bless $self, $pack;
+ # backward compat for drivers without labels.
+ if(!defined $self->{LABEL}) {
+ $self->{LABEL} = '[]';
+ }
+ $self->{LABEL} =~ s/^\[(.*)\]$/$1/ or die "$self->{NAME}: Bad label";
+ # Fix badly burned labels.
+ $self->{LABEL} =~ s/[[:^print:]]/_/g;
$self->{NAME} or die "Missing xbus name";
my $prefix = "$proc_base/" . $self->{NAME};
my $usbfile = "$prefix/xpp_usb";
@@ -73,19 +77,41 @@ sub new($$) {
$self->{USB_DEVNAME} = $head;
}
@{$self->{XPDS}} = ();
- foreach my $fqn (glob "$prefix/XPD-??") {
- $fqn =~ s:$proc_base/::;
- $fqn =~ /(\d+)$/;
- my $num = $1;
- my $xpd = Zaptel::Xpp::Xpd->new(
- FQN => $fqn,
- NUM =>, $num,
- XBUS => $self
- );
+ foreach my $dir (glob "$prefix/XPD-??") {
+ my $xpd = Zaptel::Xpp::Xpd->new($self, $dir);
push(@{$self->{XPDS}}, $xpd);
}
- @{$self->{XPDS}} = sort { $a->num <=> $b->num } @{$self->{XPDS}};
+ @{$self->{XPDS}} = sort { $a->id <=> $b->id } @{$self->{XPDS}};
return $self;
}
+sub pretty_xpds($) {
+ my $xbus = shift;
+ my @xpds = sort { $a->id <=> $b->id } $xbus->xpds();
+ my @xpd_types = map { $_->type } @xpds;
+ my $last_type = '';
+ my $mult = 0;
+ my $xpdstr = '';
+ foreach my $curr (@xpd_types) {
+ if(!$last_type || ($curr eq $last_type)) {
+ $mult++;
+ } else {
+ if($mult == 1) {
+ $xpdstr .= "$last_type ";
+ } elsif($mult) {
+ $xpdstr .= "$last_type*$mult ";
+ }
+ $mult = 1;
+ }
+ $last_type = $curr;
+ }
+ if($mult == 1) {
+ $xpdstr .= "$last_type ";
+ } elsif($mult) {
+ $xpdstr .= "$last_type*$mult ";
+ }
+ $xpdstr =~ s/\s*$//; # trim trailing space
+ return $xpdstr;
+}
+
1;
diff --git a/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm b/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
index 852aaea..ef479fb 100644
--- a/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
+++ b/xpp/utils/zconf/Zaptel/Xpp/Xpd.pm
@@ -8,22 +8,10 @@ package Zaptel::Xpp::Xpd;
# $Id$
#
use strict;
+use XppUtils;
my $proc_base = "/proc/xpp";
-# Accessors (miniperl does not have Class:Accessor)
-our $AUTOLOAD;
-sub AUTOLOAD {
- my $self = shift;
- my $name = uc($AUTOLOAD);
- $name =~ s/.*://; # strip fully-qualified portion
- if (@_) {
- return $self->{$name} = shift;
- } else {
- return $self->{$name};
- }
-}
-
sub blink($$) {
my $self = shift;
my $on = shift;
@@ -76,23 +64,54 @@ sub zt_registration($$) {
return $result;
}
+#
+# Backward compatibility for old drivers
+# before changeset:5119
+#
+# Newer drivers should directly have $xpd->spanno
+#
+sub spanno_of_xpd($) {
+ my $xpd = shift || die;
+
+ warn "Running on old driver. Keep going...\n";
+ use Zaptel;
+ my @spans = Zaptel::spans;
+
+ my ($span) = grep { $_->name eq $xpd->fqn } @spans;
+ return ($span) ? $span->num : 0;
+}
+
sub new($$) {
my $pack = shift or die "Wasn't called as a class method\n";
- my $self = { @_ };
+ my $xbus = shift || die;
+ my $procdir = shift || die;
+ my $self = {};
bless $self, $pack;
- my $dir = "$proc_base/" . $self->fqn;
- $self->{DIR} = $dir;
- open(F, "$dir/summary") || die "Missing summary file in $dir";
+ $self->{XBUS} = $xbus;
+ $self->{DIR} = $procdir;
+ local $/ = "\n";
+ open(F, "$procdir/summary") || die "Missing summary file in $procdir";
my $head = <F>;
chomp $head;
- # "XPD-00 (BRI_TE ,card present, span registered) SYNC MASTER"
+ # "XPD-00 (BRI_TE ,card present, span 3)"
close F;
- $head =~ s/^.*\(//;
- $head =~ s/\) */, /;
- $head =~ s/\s*,\s*/,/g;
- my ($type,$present,$registered,$sync) = split(/,/, $head);
- $self->{TYPE} = uc($type);
- $self->{IS_SYNC_MASTER} = ($sync =~ /MASTER/);
+ $head =~ s/^(XPD-(\d\d))\s+// || die;
+ $self->{ID} = $2;
+ $self->{FQN} = $xbus->name . "/" . $1;
+ $head =~ s/^.*\(// || die;
+ $head =~ s/\) */, / || die;
+ $head =~ s/\s*,\s*/,/g || die;
+ my ($type,$present,$span,$rest) = split(/,/, $head);
+ #warn "Garbage in '$procdir/summary': rest='$rest'\n" if $rest;
+ if($span =~ s/span\s+(\d+)//) { # since changeset:5119
+ $self->{SPANNO} = $1;
+ } else {
+ $self->{SPANNO} = $self->spanno_of_xpd;
+ }
+ $self->{TYPE} = $type;
+ $self->{IS_BRI} = ($type =~ /BRI_(NT|TE)/);
+ $self->{IS_PRI} = ($type =~ /[ETJ]1_(NT|TE)/);
+ $self->{IS_DIGITAL} = ( $self->{IS_BRI} || $self->{IS_PRI} );
return $self;
}
diff --git a/xpp/utils/zt_registration b/xpp/utils/zt_registration
index 1b26f74..3bdc642 100755
--- a/xpp/utils/zt_registration
+++ b/xpp/utils/zt_registration
@@ -42,11 +42,15 @@ sub myprintf {
my @spans = Zaptel::spans;
-foreach my $xbus (Zaptel::Xpp::xbuses('SORT_SERIAL')) {
- myprintf "%-10s\t%s\t%s\n", $xbus->name, $xbus->serial, $xbus->connector;
+foreach my $xbus (Zaptel::Xpp::xbuses('SORT_CONNECTOR')) {
+ myprintf "%-10s\t%s\t%s\n", $xbus->name, $xbus->label, $xbus->connector;
next unless $xbus->status eq 'CONNECTED';
foreach my $xpd ($xbus->xpds()) {
my $prev = $xpd->zt_registration($on);
+ if(!defined($prev)) { # Failure
+ printf "%s: Failed %s\n", $xpd->fqn, $!;
+ next;
+ }
myprintf "\t%-10s: ", $xpd->fqn;
if(!defined($on)) { # Query only
my ($span) = grep { $_->name eq $xpd->fqn } @spans;
@@ -54,10 +58,6 @@ foreach my $xbus (Zaptel::Xpp::xbuses('SORT_SERIAL')) {
myprintf "%s %s\n", state2str($prev), $spanstr ;
next;
}
- if(!defined($prev)) { # Failure
- printf "Failed %s\n", $!;
- next;
- }
myprintf "%3s ==> %3s\n", state2str($prev), state2str($on);
}
}
@@ -74,12 +74,11 @@ zt_registration [on|off]
=head1 DESCRIPTION
-Without parameters, show all connected XPDs sorted by serial number and
-physical connector order. Each one is show to be unregistered (off), or
-registered to a specific zaptel span (the span number is shown).
+Without parameters, show all connected XPDs sorted by physical connector order.
+Each one is show to be unregistered (off), or registered to a specific zaptel
+span (the span number is shown).
-All registerations/deregisterations are sorted by serial number and
-(lacking that) physical connector string.
+All registerations/deregisterations are sorted by physical connector string.
Span registration should generally always succeed. Span unregistration may
fail if channels from the span are in use by e.g. asterisk. In such a case
@@ -111,10 +110,6 @@ Astribanks:
XBUS-01/XPD-20: on Span 9
XBUS-01/XPD-30: on Span 10
-In this example the XBUS-02 has an empty serial number and thus
-becomes the first Astribank. The other two are sorted according to their
-serial numbers.
-
=head1 FILES
=over
diff --git a/xpp/xbus-core.c b/xpp/xbus-core.c
index 3935571..00acc3e 100644
--- a/xpp/xbus-core.c
+++ b/xpp/xbus-core.c
@@ -59,25 +59,138 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
/* Command line parameters */
extern int print_dbg;
DEF_PARM(uint, poll_timeout, 1000, 0644, "Timeout (in jiffies) waiting for units to reply");
+DEF_PARM_BOOL(rx_tasklet, 0, 0644, "Use receive tasklets");
static int xbus_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data);
static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count, int *eof, void *data);
-static int read_proc_xmitter(char *page, char **start, off_t off, int count, int *eof, void *data);
+static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, void *priv);
+static void transport_destroy(xbus_t *xbus);
+/*
+ * Encapsulate all poll related data of a single xbus.
+ */
+struct xbus_poller {
+ /*
+ * Bus scanning
+ */
+ uint xbus_num;
+ struct workqueue_struct *wq;
+ bool is_polling;
+ atomic_t count_poll_answers;
+ struct list_head poll_results;
+ wait_queue_head_t wait_for_polls;
+
+ struct work_struct xpds_init_work;
+
+ atomic_t count_xpds_to_initialize;
+ atomic_t count_xpds_initialized;
+ wait_queue_head_t wait_for_xpd_initialization;
+ struct proc_dir_entry *proc_xbus_waitfor_xpds;
+};
/* Data structures */
static spinlock_t xbuses_lock = SPIN_LOCK_UNLOCKED;
-static xbus_t *xbuses_array[MAX_BUSES] = {};
static int bus_count = 0;
static struct proc_dir_entry *proc_xbuses = NULL;
-/*
- * Command Statistics
- */
-uint command_count;
-ulong sum_latency;
-struct proc_dir_entry *proc_commands;
-#define PROC_CMDS "cmds"
+static struct xbus_desc {
+ xbus_t *xbus;
+ atomic_t xbus_refcount;
+ wait_queue_head_t can_release_xbus;
+} xbuses_array[MAX_BUSES];
+
+static void init_xbus(uint num, xbus_t *xbus)
+{
+ struct xbus_desc *desc;
+
+ BUG_ON(num >= ARRAY_SIZE(xbuses_array));
+ desc = &xbuses_array[num];
+ desc->xbus = xbus;
+ atomic_set(&desc->xbus_refcount, 0);
+ init_waitqueue_head(&desc->can_release_xbus);
+}
+
+int refcount_xbus(uint num)
+{
+ BUG_ON(num >= ARRAY_SIZE(xbuses_array));
+ return atomic_read(&xbuses_array[num].xbus_refcount);
+}
+
+xbus_t *get_xbus(uint num)
+{
+ struct xbus_desc *desc;
+
+ if(num >= ARRAY_SIZE(xbuses_array))
+ return NULL;
+ desc = &xbuses_array[num];
+ atomic_inc(&desc->xbus_refcount);
+ if(!desc->xbus)
+ atomic_dec(&desc->xbus_refcount);
+ return desc->xbus;
+}
+
+void put_xbus(xbus_t *xbus)
+{
+ struct xbus_desc *desc;
+ int num;
+
+ BUG_ON(!xbus);
+ num = xbus->num;
+ BUG_ON(num >= ARRAY_SIZE(xbuses_array));
+ desc = &xbuses_array[num];
+ BUG_ON(desc->xbus != xbus);
+ if(atomic_dec_and_test(&desc->xbus_refcount)) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0)
+ XBUS_DBG(DEVICES, xbus,
+ "wake_up(can_release_xbus) (%d)\n", rate_limit);
+ wake_up(&desc->can_release_xbus);
+ }
+}
+
+bool __must_check wait_for_xbus_release(uint xbus_num)
+{
+ xbus_t *xbus;
+ int ret;
+
+ xbus = get_xbus(xbus_num);
+ if(!xbus) {
+ ERR("%s: xbus #%d is already removed. Skip.\n",
+ __FUNCTION__, xbus_num);
+ return 0;
+ }
+ put_xbus(xbus);
+ DBG(DEVICES, "Waiting... refcount_xbus=%d\n", refcount_xbus(xbus_num));
+ ret = wait_event_interruptible(xbuses_array[xbus_num].can_release_xbus,
+ refcount_xbus(xbus_num) == 0);
+ if(ret) {
+ ERR("%s: waiting for xbus #%d interrupted!!!\n",
+ __FUNCTION__, xbus_num);
+ } else
+ DBG(DEVICES, "Waiting for refcount_xbus done.\n");
+ return 1;
+}
+
+static void initialize_xbuses_array(void)
+{
+ int i;
+
+ for(i = 0; i < ARRAY_SIZE(xbuses_array); i++)
+ init_xbus(i, NULL);
+}
+
+static void finalize_xbuses_array(void)
+{
+ int i;
+
+ for(i = 0; i < ARRAY_SIZE(xbuses_array); i++) {
+ if(xbuses_array[i].xbus != NULL) {
+ ERR("%s: xbus #%d is not NULL\n", __FUNCTION__, i);
+ BUG();
+ }
+ }
+}
/*------------------------- Debugfs Handling -----------------------*/
#ifdef XPP_DEBUGFS
@@ -230,31 +343,18 @@ static int debugfs_release(struct inode *inode, struct file *file)
#endif
/*------------------------- Frame Handling ------------------------*/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-static kmem_cache_t *xframes_cache = NULL;
-#else
-static struct kmem_cache *xframes_cache = NULL;
-#endif
-xframe_t *xbus_xframe_new(xbus_t *xbus, gfp_t flags)
+void xframe_init(xbus_t *xbus, xframe_t *xframe, void *buf, size_t maxsize, void *priv)
{
- xframe_t *frm;
-
- frm = kmem_cache_alloc(xframes_cache, flags);
- if(!frm)
- return NULL;
- memset(frm, 0, sizeof(xframe_t) + XFRAME_DATASIZE);
- INIT_LIST_HEAD(&frm->frame_list);
- atomic_set(&frm->frame_len, 0);
- frm->xbus = xbus;
- do_gettimeofday(&frm->tv_created);
- frm->packets = (byte *)frm + sizeof(xframe_t);
- return frm;
-}
-
-void xbus_xframe_free(xbus_t *xbus, xframe_t *p)
-{
- kmem_cache_free(xframes_cache, p);
+ memset(xframe, 0, sizeof(*xframe));
+ INIT_LIST_HEAD(&xframe->frame_list);
+ xframe->priv = priv;
+ xframe->xbus = xbus;
+ xframe->packets = xframe->first_free = buf;
+ xframe->frame_maxlen = maxsize;
+ atomic_set(&xframe->frame_len, 0);
+ do_gettimeofday(&xframe->tv_created);
+ xframe->xframe_magic = XFRAME_MAGIC;
}
/*
@@ -268,7 +368,7 @@ void xbus_xframe_free(xbus_t *xbus, xframe_t *p)
*/
xpacket_t *xframe_next_packet(xframe_t *frm, int len)
{
- int newlen = atomic_read(&frm->frame_len);
+ int newlen = XFRAME_LEN(frm);
newlen += len;
// DBG(GENERAL, "len=%d, newlen=%d, frm->frame_len=%d\n", len, newlen, XFRAME_LEN(frm));
@@ -284,7 +384,7 @@ static spinlock_t serialize_dump_xframe = SPIN_LOCK_UNLOCKED;
static void do_hexdump(const char msg[], byte *data, uint16_t len)
{
int i;
- int print_dbg = 1;
+ int print_dbg = DBG_ANY; /* mask global print_dbg */
for(i = 0; i < len; i++)
DBG(ANY, "%s: %3d> %02X\n", msg, i, data[i]);
@@ -292,7 +392,7 @@ static void do_hexdump(const char msg[], byte *data, uint16_t len)
void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe)
{
- const uint16_t frame_len = XFRAME_LEN(xframe);
+ const uint16_t frm_len = XFRAME_LEN(xframe);
xpacket_t *pack;
uint16_t pos = 0;
uint16_t nextpos;
@@ -300,21 +400,26 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe)
bool do_print;
unsigned long flags;
+ if(xframe->xframe_magic != XFRAME_MAGIC) {
+ XBUS_ERR(xbus, "%s: bad xframe_magic %lX\n",
+ __FUNCTION__, xframe->xframe_magic);
+ return;
+ }
spin_lock_irqsave(&serialize_dump_xframe, flags);
do {
- if(pos >= XFRAME_DATASIZE) {
+ if(pos >= xbus->transport.max_send_size) {
if(printk_ratelimit()) {
XBUS_NOTICE(xbus, "%s: xframe overflow (%d bytes)\n",
- msg, frame_len);
- do_hexdump(msg, xframe->packets, frame_len);
+ msg, frm_len);
+ do_hexdump(msg, xframe->packets, frm_len);
}
break;
}
- if(pos > frame_len) {
+ if(pos > frm_len) {
if(printk_ratelimit()) {
XBUS_NOTICE(xbus, "%s: packet overflow pos=%d frame_len=%d\n",
- msg, pos, frame_len);
- do_hexdump(msg, xframe->packets, frame_len);
+ msg, pos, frm_len);
+ do_hexdump(msg, xframe->packets, frm_len);
}
break;
}
@@ -322,17 +427,17 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe)
if(XPACKET_LEN(pack) <= 0) {
if(printk_ratelimit()) {
XBUS_NOTICE(xbus, "%s: xframe -- bad packet_len=%d pos=%d frame_len=%d\n",
- msg, XPACKET_LEN(pack), pos, frame_len);
- do_hexdump(msg, xframe->packets, frame_len);
+ msg, XPACKET_LEN(pack), pos, frm_len);
+ do_hexdump(msg, xframe->packets, frm_len);
}
break;
}
nextpos = pos + XPACKET_LEN(pack);
- if(nextpos > frame_len) {
+ if(nextpos > frm_len) {
if(printk_ratelimit()) {
XBUS_NOTICE(xbus, "%s: packet overflow nextpos=%d frame_len=%d\n",
- msg, nextpos, frame_len);
- do_hexdump(msg, xframe->packets, frame_len);
+ msg, nextpos, frm_len);
+ do_hexdump(msg, xframe->packets, frm_len);
}
break;
}
@@ -349,7 +454,7 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe)
if(do_print) {
if(num == 1) {
XBUS_DBG(ANY, xbus, "%s: frame_len=%d. %s\n",
- msg, frame_len,
+ msg, frm_len,
(XPACKET_IS_PCM(pack))
? "(IS_PCM)"
: "");
@@ -364,73 +469,207 @@ void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe)
}
num++;
pos = nextpos;
- if(pos >= frame_len)
+ if(pos >= frm_len)
break;
} while(1);
spin_unlock_irqrestore(&serialize_dump_xframe, flags);
}
+bool xbus_ready(const xbus_t *xbus, const char msg[])
+{
+ if(!xbus) {
+ ERR("null xbus: %s\n", msg);
+ return 0;
+ }
+ if (!TRANSPORT_RUNNING(xbus)) {
+ XBUS_ERR(xbus, "%s -- hardware is not ready.", msg);
+ return 0;
+ }
+ if(!xbus->transport.ops) {
+ XBUS_ERR(xbus, "%s -- hardware is gone.", msg);
+ return 0;
+ }
+ return 1;
+}
+
/**
*
* Frame is freed:
* - In case of error, by this function.
* - Otherwise, by the underlying sending mechanism
*/
-int xframe_send(xbus_t *xbus, xframe_t *xframe)
+int send_pcm_frame(xbus_t *xbus, xframe_t *xframe)
{
+ struct xbus_ops *ops;
int ret = -ENODEV;
- if(!xframe) {
- DBG(GENERAL, "null xframe\n");
- return -EINVAL;
- }
- if(!xbus) {
- DBG(GENERAL, "null xbus\n");
- ret = -EINVAL;
- goto error;
- }
- if (!xbus->hardware_exists) {
- XBUS_DBG(GENERAL, xbus, "Dropped a xframe -- NO HARDWARE.");
+ BUG_ON(!xframe);
+ if(!xbus_ready(xbus, "Dropped a pcm frame")) {
ret = -ENODEV;
goto error;
}
- if(down_read_trylock(&xbus->in_use)) {
- ret = xbus->ops->xframe_send(xbus, xframe);
+ ops = transportops_get(xbus);
+ BUG_ON(!ops);
+ ret = ops->xframe_send_pcm(xbus, xframe);
+ transportops_put(xbus);
+ if(ret)
XBUS_COUNTER(xbus, TX_BYTES) += XFRAME_LEN(xframe);
- up_read(&xbus->in_use);
- } else {
- XBUS_DBG(GENERAL, xbus, "Dropped xframe. Is in_use\n");
- }
return ret;
error:
- xbus->ops->xframe_free(xbus, xframe);
+ FREE_SEND_XFRAME(xbus, xframe);
+ return ret;
+}
+
+static int really_send_cmd_frame(xbus_t *xbus, xframe_t *xframe)
+{
+ struct xbus_ops *ops;
+ int ret;
+
+ BUG_ON(!xbus);
+ BUG_ON(!xframe);
+ BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
+ if(!xbus_ready(xbus, "Dropped command before sending")) {
+ FREE_SEND_XFRAME(xbus, xframe);
+ return -ENODEV;
+ }
+ ops = transportops_get(xbus);
+ BUG_ON(!ops);
+ ret = ops->xframe_send_cmd(xbus, xframe);
+ transportops_put(xbus);
+ if(ret == 0) {
+ XBUS_COUNTER(xbus, TX_CMD)++;
+ XBUS_COUNTER(xbus, TX_BYTES) += XFRAME_LEN(xframe);
+ }
+ return ret;
+}
+
+int xbus_command_queue_tick(xbus_t *xbus)
+{
+ xframe_t *frm;
+ int ret = 0;
+
+ frm = xframe_dequeue(&xbus->command_queue);
+ if(frm) {
+ BUG_ON(frm->xframe_magic != XFRAME_MAGIC);
+ ret = really_send_cmd_frame(xbus, frm);
+ if(ret < 0)
+ XBUS_ERR(xbus,
+ "Failed to send from command_queue (ret=%d)\n",
+ ret);
+ XBUS_PUT(xbus);
+ } else
+ wake_up(&xbus->command_queue_empty);
+ return ret;
+}
+
+static void xbus_command_queue_clean(xbus_t *xbus)
+{
+ xframe_t *frm;
+
+ XBUS_DBG(DEVICES, xbus, "count=%d\n", xbus->command_queue.count);
+ xframe_queue_disable(&xbus->command_queue);
+ while((frm = xframe_dequeue(&xbus->command_queue)) != NULL) {
+ FREE_SEND_XFRAME(xbus, frm);
+ XBUS_PUT(xbus);
+ }
+}
+
+static int xbus_command_queue_waitempty(xbus_t *xbus)
+{
+ int ret;
+
+ XBUS_DBG(DEVICES, xbus, "Waiting for command_queue to empty\n");
+ ret = wait_event_interruptible(xbus->command_queue_empty,
+ xframe_queue_count(&xbus->command_queue) == 0);
+ if(ret) {
+ XBUS_ERR(xbus, "waiting for command_queue interrupted!!!\n");
+ }
return ret;
}
int send_cmd_frame(xbus_t *xbus, xframe_t *xframe)
{
- struct timeval now;
- struct timeval *created = &xframe->tv_created;
- ulong usec_diff;
+ static int rate_limit;
+ const char *msg = "";
+ int ret = 0;
- command_count++;
- do_gettimeofday(&now);
- usec_diff =
- (now.tv_sec - created->tv_sec) * 1000000 +
- (now.tv_usec - created->tv_usec);
- sum_latency += usec_diff;
- return xframe_send(xbus, xframe);
+
+ BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
+ if(!xbus_ready(xbus, "Dropped command before queueing")) {
+ ret = -ENODEV;
+ goto err;
+ }
+ if(!XBUS_GET(xbus)) {
+ msg = "Dropped command xframe. Is shutting down.";
+ ret = -ENODEV;
+ goto err;
+ }
+ if(!xframe_enqueue(&xbus->command_queue, xframe)) {
+ XBUS_PUT(xbus);
+ msg = "Dropped command xframe. Cannot enqueue.";
+ ret = -E2BIG;
+ goto err;
+ }
+ return 0;
+err:
+ if((rate_limit++ % 1003) == 0) {
+ XBUS_ERR(xbus, "%s\n", msg);
+ dump_xframe("send_cmd_frame", xbus, xframe);
+ }
+ FREE_SEND_XFRAME(xbus, xframe);
+ return ret;
}
-/*------------------------- Bus Management -------------------------*/
-xbus_t *xbus_of(int xbus_num)
+/*------------------------- Receive Tasklet Handling ---------------*/
+
+static void xframe_enqueue_recv(xbus_t *xbus, xframe_t *xframe)
{
- if(xbus_num < 0 || xbus_num >= MAX_BUSES)
- return NULL;
- return xbuses_array[xbus_num];
+ int cpu = smp_processor_id();
+
+ BUG_ON(!xbus);
+ xbus->cpu_rcv_intr[cpu]++;
+ if(!xframe_enqueue(&xbus->receive_queue, xframe)) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0)
+ XBUS_ERR(xbus, "Failed to enqueue for receive_tasklet (%d)\n", rate_limit);
+ FREE_RECV_XFRAME(xbus, xframe); /* return to receive_pool */
+ return;
+ }
+ tasklet_schedule(&xbus->receive_tasklet);
+}
+
+/*
+ * process frames in the receive_queue in a tasklet
+ */
+static void receive_tasklet_func(unsigned long data)
+{
+ xbus_t *xbus = (xbus_t *)data;
+ xframe_t *xframe = NULL;
+ int cpu = smp_processor_id();
+
+ BUG_ON(!xbus);
+ xbus->cpu_rcv_tasklet[cpu]++;
+ while((xframe = xframe_dequeue(&xbus->receive_queue)) != NULL) {
+ xframe_receive(xbus, xframe);
+ }
+}
+
+void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe)
+{
+ BUG_ON(!xbus);
+ if(rx_tasklet) {
+ xframe_enqueue_recv(xbus, xframe);
+ } else {
+ if (likely(TRANSPORT_RUNNING(xbus)))
+ xframe_receive(xbus, xframe);
+ else
+ FREE_RECV_XFRAME(xbus, xframe); /* return to receive_pool */
+ }
}
+/*------------------------- Bus Management -------------------------*/
xpd_t *xpd_of(const xbus_t *xbus, int xpd_num)
{
if(!VALID_XPD_NUM(xpd_num))
@@ -451,6 +690,10 @@ int xbus_register_xpd(xbus_t *xbus, xpd_t *xpd)
unsigned long flags;
int ret = 0;
+ xbus = get_xbus(xbus->num); /* until unregister */
+ BUG_ON(!xbus);
+ XBUS_DBG(DEVICES, xbus, "XPD #%d (xbus_refcount=%d)\n",
+ xpd_num, refcount_xbus(xbus->num));
spin_lock_irqsave(&xbus->lock, flags);
if(!VALID_XPD_NUM(xpd_num)) {
XBUS_ERR(xbus, "Bad xpd_num = %d\n", xpd_num);
@@ -480,6 +723,8 @@ int xbus_unregister_xpd(xbus_t *xbus, xpd_t *xpd)
int ret = -EINVAL;
spin_lock_irqsave(&xbus->lock, flags);
+ XBUS_DBG(DEVICES, xbus, "XPD #%d (xbus_refcount=%d)\n",
+ xpd_num, refcount_xbus(xbus->num));
if(!VALID_XPD_NUM(xpd_num)) {
XBUS_ERR(xbus, "%s: Bad xpd_num = %d\n", __FUNCTION__, xpd_num);
goto out;
@@ -498,6 +743,7 @@ int xbus_unregister_xpd(xbus_t *xbus, xpd_t *xpd)
xbus->xpds[xpd_num] = NULL;
xbus->num_xpds--;
xpd->xbus = NULL;
+ put_xbus(xbus); /* we got it in xbus_register_xpd() */
ret = 0;
out:
spin_unlock_irqrestore(&xbus->lock, flags);
@@ -547,24 +793,27 @@ static void xbus_poll(void *data)
xbus_t *xbus;
BUG_ON(!poller);
- xbus = poller->xbus;
- BUG_ON(!xbus);
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_ERR(xbus, "Is being removed...\n");
+ xbus = get_xbus(poller->xbus_num);
+ if(!xbus) {
+ XBUS_ERR(xbus, "Aborting poll. XBUS #%d disappeared.\n",
+ poller->xbus_num);
return;
}
msleep(2); /* roundtrip for older polls */
spin_lock_irqsave(&xbus->lock, flags);
- XBUS_DBG(GENERAL, xbus, "\n");
+ XBUS_DBG(DEVICES, xbus, "\n");
poller->is_polling = 1;
-
+ if(!XBUS_GET(xbus)) {
+ XBUS_ERR(xbus, "Aborting poll. Is shutting down.\n");
+ goto out;
+ }
/*
* Send out the polls
*/
for(id = 0; id < MAX_XPDS; id++) {
- if(!xbus->hardware_exists)
+ if(!TRANSPORT_RUNNING(xbus))
break;
- // XBUS_DBG(GENERAL, xbus, "Polling slot %d\n", id);
+ XBUS_DBG(DEVICES, xbus, "Polling slot %d\n", id);
spin_unlock_irqrestore(&xbus->lock, flags);
ret = CALL_PROTO(GLOBAL, DESC_REQ, xbus, NULL, id);
spin_lock_irqsave(&xbus->lock, flags);
@@ -577,7 +826,7 @@ static void xbus_poll(void *data)
/*
* Wait for replies
*/
- XBUS_DBG(GENERAL, xbus, "Polled %d XPD's. Waiting for replies max %d jiffies\n", MAX_XPDS, poll_timeout);
+ XBUS_DBG(DEVICES, xbus, "Polled %d XPD's. Waiting for replies max %d jiffies\n", MAX_XPDS, poll_timeout);
ret = wait_event_interruptible_timeout(poller->wait_for_polls, atomic_read(&poller->count_poll_answers) >= MAX_XPDS, poll_timeout);
if(ret == 0) {
XBUS_ERR(xbus, "Poll timeout. Continuing anyway.\n");
@@ -588,7 +837,7 @@ static void xbus_poll(void *data)
XBUS_ERR(xbus, "Poll interrupted %d\n", ret);
goto out;
} else
- XBUS_DBG(GENERAL, xbus, "Poll finished in %d jiffies.\n", poll_timeout - ret);
+ XBUS_DBG(DEVICES, xbus, "Poll finished in %d jiffies.\n", poll_timeout - ret);
/*
* Build removals/additions lists
*/
@@ -603,6 +852,12 @@ static void xbus_poll(void *data)
xpd_t *xpd;
BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
+ /*
+ * Return the refcount we got in xbus_poller_notify()
+ * We are still protected by the refcount taken in
+ * the beginning of xbus_poll().
+ */
+ put_xbus(xbus);
xpd = xpd_byaddr(xbus, card_desc->xpd_addr.unit, card_desc->xpd_addr.subunit);
if(xpd && type == XPD_TYPE_NOMODULE) { /* card removal */
@@ -666,10 +921,18 @@ static void xbus_poll(void *data)
XBUS_ERR(xbus, "%s: xbus_sysfs_create() failed: %d\n", __FUNCTION__, ret);
goto out;
}
- wake_up(&poller->wait_for_xpd_initialization);
+ /*
+ * Now request Astribank to start self_ticking.
+ * This is the last initialization command. So
+ * all others will reach the device before it.
+ */
+ xbus_request_sync(xbus, SYNC_MODE_PLL);
+ elect_syncer("xbus_poll(end)"); /* FIXME: try to do it later */
out:
poller->is_polling = 0; /* just for safety */
- up_read(&xbus->in_use);
+ XBUS_PUT(xbus);
+ wake_up(&poller->wait_for_xpd_initialization);
+ put_xbus(xbus);
return;
}
@@ -697,6 +960,12 @@ void xbus_poller_notify(xbus_t *xbus, struct card_desc_struct *card_desc)
list_add_tail(&card_desc->card_list, &poller->poll_results);
spin_unlock_irqrestore(&xbus->lock, flags);
/*
+ * Reference counting for the xbus.
+ * Would be returned in xbus_poll()
+ */
+ xbus = get_xbus(xbus->num);
+ BUG_ON(!xbus);
+ /*
* wake_up only after exiting our critical section.
* We suspect that otherwise a spinlock nesting may occur
* and cause a panic (if spinlock debugging is compiled in).
@@ -707,18 +976,30 @@ void xbus_poller_notify(xbus_t *xbus, struct card_desc_struct *card_desc)
static void poller_destroy(struct xbus_poller *poller)
{
+ xbus_t *xbus;
+
if(!poller)
return;
- if(poller->xbus) {
- XBUS_DBG(GENERAL, poller->xbus, "detach poller\n");
- poller->xbus->poller = NULL;
+ xbus = get_xbus(poller->xbus_num);
+ if(xbus) {
+#ifdef CONFIG_PROC_FS
+ if(xbus->proc_xbus_dir && poller->proc_xbus_waitfor_xpds) {
+ XBUS_DBG(PROC, xbus, "Removing proc '%s'\n", PROC_XBUS_WAITFOR_XPDS);
+ remove_proc_entry(PROC_XBUS_WAITFOR_XPDS, xbus->proc_xbus_dir);
+ poller->proc_xbus_waitfor_xpds = NULL;
+ }
+#endif
+ XBUS_DBG(DEVICES, xbus, "detach poller\n");
+ xbus->poller = NULL;
}
if (poller->wq) {
- XBUS_DBG(GENERAL, poller->xbus, "destroy workqueue\n");
+ DBG(DEVICES, "XBUS #%d: destroy workqueue\n", poller->xbus_num);
flush_workqueue(poller->wq);
destroy_workqueue(poller->wq);
poller->wq = NULL;
}
+ put_xbus(xbus);
+ memset(poller, 0, sizeof(*poller));
kfree(poller);
}
@@ -733,12 +1014,12 @@ static struct xbus_poller *poller_new(xbus_t *xbus)
BUG_ON(xbus->busname[0] == '\0'); /* No name? */
BUG_ON(xbus->poller); /* Hmmm... overrun pollers? */
- XBUS_DBG(GENERAL, xbus, "\n");
+ XBUS_DBG(DEVICES, xbus, "\n");
poller = kmalloc(sizeof(*poller), GFP_KERNEL);
if(!poller)
goto err;
memset(poller, 0, sizeof(*poller));
- poller->xbus = xbus;
+ poller->xbus_num = xbus->num;
xbus->poller = poller;
/* poll related variables */
atomic_set(&poller->count_poll_answers, 0);
@@ -752,6 +1033,20 @@ static struct xbus_poller *poller_new(xbus_t *xbus)
XBUS_ERR(xbus, "Failed to create poller workqueue.\n");
goto err;
}
+#ifdef CONFIG_PROC_FS
+ if(xbus->proc_xbus_dir) {
+ poller->proc_xbus_waitfor_xpds = create_proc_read_entry(
+ PROC_XBUS_WAITFOR_XPDS, 0444,
+ xbus->proc_xbus_dir,
+ xbus_read_waitfor_xpds,
+ xbus);
+ if (!poller->proc_xbus_waitfor_xpds) {
+ XBUS_ERR(xbus, "Failed to create proc file '%s'\n", PROC_XBUS_WAITFOR_XPDS);
+ goto err;
+ }
+ poller->proc_xbus_waitfor_xpds->owner = THIS_MODULE;
+ }
+#endif
return poller;
err:
poller_destroy(poller);
@@ -783,23 +1078,35 @@ static int poller_dispatch(xbus_t *xbus)
return 1;
}
-void xbus_activate(xbus_t *xbus)
+int xbus_activate(xbus_t *xbus)
{
- xbus_ops_t *ops;
+ struct xbus_ops *ops;
struct xbus_poller *poller;
BUG_ON(!xbus);
- ops = xbus->ops;
+ ops = transportops_get(xbus);
BUG_ON(!ops);
poller = xbus->poller;
BUG_ON(!poller);
/* Sanity checks */
- BUG_ON(!ops->xframe_send);
- BUG_ON(!ops->xframe_new || !ops->xframe_free);
- xbus->hardware_exists = 1;
- XBUS_DBG(GENERAL, xbus, "Activating\n");
+ BUG_ON(!ops->xframe_send_pcm);
+ BUG_ON(!ops->xframe_send_cmd);
+ BUG_ON(!ops->alloc_xframe);
+ BUG_ON(!ops->free_xframe);
+ xpp_timing_init(&xbus->timing, xbus->busname);
+ /*
+ * We start with timer based ticking
+ */
+ xbus_set_command_timer(xbus, 1);
+ xbus->transport.transport_running = 1; /* must be done after transport is valid */
+ XBUS_INFO(xbus, "[%s] Activating\n", xbus->label);
+ /*
+ * Make sure Astribank knows not to send us ticks.
+ */
+ xbus_request_sync(xbus, SYNC_MODE_NONE);
/* Poll it */
poller_dispatch(xbus);
+ return 0;
}
void xbus_disconnect(xbus_t *xbus)
@@ -807,8 +1114,9 @@ void xbus_disconnect(xbus_t *xbus)
int i;
BUG_ON(!xbus);
- XBUS_DBG(GENERAL, xbus, "\n");
- xbus->hardware_exists = 0;
+ XBUS_INFO(xbus, "[%s] Disconnecting\n", xbus->label);
+ xbus_set_command_timer(xbus, 1);
+ xbus_request_sync(xbus, SYNC_MODE_PLL); /* no more ticks */
for(i = 0; i < MAX_XPDS; i++) {
xpd_t *xpd = xpd_of(xbus, i);
if(!xpd)
@@ -819,8 +1127,22 @@ void xbus_disconnect(xbus_t *xbus)
}
xpd_disconnect(xpd);
}
- XBUS_DBG(GENERAL, xbus, "Deactivated\n");
- if(xbus->open_counter == 0) {
+ XBUS_DBG(DEVICES, xbus, "Deactivating\n");
+ tasklet_kill(&xbus->receive_tasklet);
+ xframe_queue_clear(&xbus->receive_queue);
+ xbus_command_queue_clean(xbus);
+ xbus_command_queue_waitempty(xbus);
+ del_timer_sync(&xbus->command_timer);
+ xframe_queue_clear(&xbus->send_pool);
+ xframe_queue_clear(&xbus->receive_pool);
+ xframe_queue_clear(&xbus->pcm_tospan[0]);
+ xframe_queue_clear(&xbus->pcm_tospan[1]);
+ transportops_put(xbus);
+ transport_destroy(xbus);
+ elect_syncer("disconnect");
+ XBUS_DBG(DEVICES, xbus, "Deactivated (refcount_xbus=%d)\n", refcount_xbus(xbus->num));
+ if(atomic_dec_and_test(&xbus->xbus_ref_count)) {
+ XBUS_DBG(DEVICES, xbus, "Going to remove XBUS\n");
xbus_remove(xbus);
}
}
@@ -839,7 +1161,7 @@ static xbus_t *xbus_alloc(void)
memset(xbus, 0, sizeof(xbus_t));
spin_lock_irqsave(&xbuses_lock, flags);
for(i = 0; i < MAX_BUSES; i++)
- if(xbuses_array[i] == NULL)
+ if(xbuses_array[i].xbus == NULL)
break;
if(i >= MAX_BUSES) {
ERR("%s: No free slot for new bus. i=%d\n", __FUNCTION__, i);
@@ -847,8 +1169,9 @@ static xbus_t *xbus_alloc(void)
return NULL;
}
/* Found empty slot */
- xbuses_array[i] = xbus;
xbus->num = i;
+ init_xbus(i, xbus);
+ xbus = get_xbus(i);
bus_count++;
spin_unlock_irqrestore(&xbuses_lock, flags);
return xbus;
@@ -858,14 +1181,14 @@ static xbus_t *xbus_alloc(void)
static void xbus_free(xbus_t *xbus)
{
unsigned long flags;
+ uint num;
if(!xbus)
return;
spin_lock_irqsave(&xbuses_lock, flags);
- BUG_ON(!xbus_of(xbus->num));
- BUG_ON(xbus != xbus_of(xbus->num));
- xbuses_array[xbus->num] = NULL;
- bus_count--;
+ num = xbus->num;
+ BUG_ON(!xbuses_array[num].xbus);
+ BUG_ON(xbus != xbuses_array[num].xbus);
spin_unlock_irqrestore(&xbuses_lock, flags);
#ifdef XPP_DEBUGFS
if(xbus->debugfs_dir) {
@@ -877,6 +1200,7 @@ static void xbus_free(xbus_t *xbus)
debugfs_remove(xbus->debugfs_dir);
}
#endif
+ poller_destroy(xbus->poller);
#ifdef CONFIG_PROC_FS
if(xbus->proc_xbus_dir) {
if(xbus->proc_xbus_summary) {
@@ -884,11 +1208,6 @@ static void xbus_free(xbus_t *xbus)
remove_proc_entry(PROC_XBUS_SUMMARY, xbus->proc_xbus_dir);
xbus->proc_xbus_summary = NULL;
}
- if(xbus->proc_xbus_waitfor_xpds) {
- XBUS_DBG(PROC, xbus, "Removing proc '%s'\n", PROC_XBUS_WAITFOR_XPDS);
- remove_proc_entry(PROC_XBUS_WAITFOR_XPDS, xbus->proc_xbus_dir);
- xbus->proc_xbus_waitfor_xpds = NULL;
- }
#ifdef PROTOCOL_DEBUG
if(xbus->proc_xbus_command) {
XBUS_DBG(PROC, xbus, "Removing proc '%s'\n", PROC_XBUS_COMMAND);
@@ -901,42 +1220,48 @@ static void xbus_free(xbus_t *xbus)
xbus->proc_xbus_dir = NULL;
}
#endif
- poller_destroy(xbus->poller);
+ spin_lock_irqsave(&xbuses_lock, flags);
+ /*
+ * Return to xbus reference counts:
+ * - One from our caller: transport disconnect or xpp_close()
+ * - One from xbus_alloc()
+ */
+ put_xbus(xbus);
+ put_xbus(xbus);
+ if(!wait_for_xbus_release(xbus->num))
+ BUG(); /* Let's see what happens next... */
+ bus_count--;
+ XBUS_DBG(DEVICES, xbus, "Going to free... refcount_xbus=%d\n", refcount_xbus(num));
+ BUG_ON(refcount_xbus(num) != 0);
+ init_xbus(num, NULL);
+ spin_unlock_irqrestore(&xbuses_lock, flags);
+ memset(xbus, 0, sizeof(*xbus));
kfree(xbus);
}
-xbus_t *xbus_new(xbus_ops_t *ops, size_t xframe_size)
+xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv)
{
int err;
xbus_t *xbus = NULL;
struct xbus_poller *poller;
BUG_ON(!ops);
+ XBUS_DBG(GENERAL, xbus, "allocate new xbus\n");
xbus = xbus_alloc();
if(!xbus)
return NULL;
- /* Init data structures */
- xbus->max_xframe_size = xframe_size;
+ transport_init(xbus, ops, max_send_size, priv);
spin_lock_init(&xbus->lock);
+ atomic_set(&xbus->xbus_ref_count, 1); /* a single ref */
snprintf(xbus->busname, XBUS_NAMELEN, "XBUS-%02d", xbus->num);
- XBUS_INFO(xbus, "New xbus\n");
- init_waitqueue_head(&xbus->packet_cache_empty);
- atomic_set(&xbus->packet_counter, 0);
- atomic_set(&xbus->pcm_nesting, 1);
+ init_waitqueue_head(&xbus->command_queue_empty);
+ init_timer(&xbus->command_timer);
+ atomic_set(&xbus->pcm_rx_counter, 0);
xbus->min_tx_sync = INT_MAX;
xbus->min_rx_sync = INT_MAX;
xbus->num_xpds = 0;
- /*
- * Create poller before /proc/XBUS-?? so it already exists
- * when somebody tries to read /proc/XBUS-??/waitfor_xpds
- */
- poller = poller_new(xbus);
- if(!poller) {
- ERR("Failed to allocate poller\n");
- xbus_free(xbus);
- return NULL;
- }
+ xbus->sync_mode = SYNC_MODE_NONE;
init_rwsem(&xbus->in_use);
xbus_reset_counters(xbus);
#ifdef CONFIG_PROC_FS
@@ -948,21 +1273,13 @@ xbus_t *xbus_new(xbus_ops_t *ops, size_t xframe_size)
goto nobus;
}
xbus->proc_xbus_summary = create_proc_read_entry(PROC_XBUS_SUMMARY, 0444, xbus->proc_xbus_dir,
- xbus_read_proc, xbus);
+ xbus_read_proc, (void *)(xbus->num));
if (!xbus->proc_xbus_summary) {
XBUS_ERR(xbus, "Failed to create proc file '%s'\n", PROC_XBUS_SUMMARY);
err = -EIO;
goto nobus;
}
xbus->proc_xbus_summary->owner = THIS_MODULE;
- xbus->proc_xbus_waitfor_xpds = create_proc_read_entry(PROC_XBUS_WAITFOR_XPDS, 0444, xbus->proc_xbus_dir,
- xbus_read_waitfor_xpds, xbus);
- if (!xbus->proc_xbus_waitfor_xpds) {
- XBUS_ERR(xbus, "Failed to create proc file '%s'\n", PROC_XBUS_WAITFOR_XPDS);
- err = -EIO;
- goto nobus;
- }
- xbus->proc_xbus_waitfor_xpds->owner = THIS_MODULE;
#ifdef PROTOCOL_DEBUG
xbus->proc_xbus_command = create_proc_entry(PROC_XBUS_COMMAND, 0200, xbus->proc_xbus_dir);
if (!xbus->proc_xbus_command) {
@@ -987,18 +1304,23 @@ xbus_t *xbus_new(xbus_ops_t *ops, size_t xframe_size)
goto nobus;
}
#endif
- /* Sanity checks */
- if(!ops->xframe_send) {
- XBUS_ERR(xbus, "missing mandatory handler: xframe_send\n");
- goto nobus;
- }
- if(!ops->xframe_new || !ops->xframe_free) {
- XBUS_NOTICE(xbus, "Using default packet allocators\n");
- ops->xframe_new = xbus_xframe_new;
- ops->xframe_free = xbus_xframe_free;
+ xframe_queue_init(&xbus->command_queue, 10, 200, "command_queue", xbus);
+ xframe_queue_init(&xbus->receive_queue, 10, 50, "receive_queue", xbus);
+ xframe_queue_init(&xbus->send_pool, 10, 200, "send_pool", xbus);
+ xframe_queue_init(&xbus->receive_pool, 10, 50, "receive_pool", xbus);
+ xframe_queue_init(&xbus->pcm_tospan[0], 5, 10, "pcm_tospan[0]", xbus);
+ xframe_queue_init(&xbus->pcm_tospan[1], 5, 10, "pcm_tospan[1]", xbus);
+ tasklet_init(&xbus->receive_tasklet, receive_tasklet_func, (unsigned long)xbus);
+ /*
+ * Create poller after /proc/XBUS-?? so the directory exists
+ * before /proc/XBUS-??/waitfor_xpds tries to get created.
+ */
+ poller = poller_new(xbus);
+ if(!poller) {
+ ERR("Failed to allocate poller\n");
+ xbus_free(xbus);
+ return NULL;
}
-
- xbus->ops = ops;
return xbus;
nobus:
xbus_free(xbus);
@@ -1008,19 +1330,11 @@ nobus:
void xbus_remove(xbus_t *xbus)
{
int i;
- int ret;
-
- BUG_ON(!xbus);
- if(!xbus_of(xbus->num)) {
- DBG(GENERAL, "XBUS #%d was already removed. Skip.\n", xbus->num);
- return;
- }
- XBUS_DBG(GENERAL, xbus, "\n");
- /* Block until no one use */
+ BUG_ON(TRANSPORT_RUNNING(xbus));
down_write(&xbus->in_use);
- XBUS_INFO(xbus, "Removing xbus\n");
+ XBUS_INFO(xbus, "[%s] Removing\n", xbus->label);
xbus_sysfs_remove(xbus); /* Device-Model */
for(i = 0; i < MAX_XPDS; i++) {
xpd_t *xpd = xpd_of(xbus, i);
@@ -1030,16 +1344,11 @@ void xbus_remove(xbus_t *xbus)
XBUS_ERR(xbus, "BUG: xpd->xbus_idx=%d != i=%d\n", xpd->xbus_idx, i);
continue;
}
- XBUS_DBG(GENERAL, xbus, " Removing xpd #%d\n", i);
+ XBUS_DBG(DEVICES, xbus, " Removing xpd #%d\n", i);
xpd_remove(xpd);
}
xbus->xpds[i] = NULL;
}
- ret = wait_event_interruptible(xbus->packet_cache_empty,
- atomic_read(&xbus->packet_counter) == 0);
- if(ret) {
- XBUS_ERR(xbus, "waiting for packet_cache_empty interrupted!!!\n");
- }
xbus_free(xbus);
}
@@ -1056,43 +1365,95 @@ void xbus_reset_counters(xbus_t *xbus)
}
#if CONFIG_PROC_FS
+
+static int xbus_fill_proc_queue(char *p, struct xframe_queue *q)
+{
+ int len;
+
+ len = sprintf(p,
+ "%-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02ld.%ld ms\n",
+ q->name,
+ q->steady_state_count,
+ q->count,
+ q->max_count,
+ q->worst_count,
+ q->overflows,
+ q->worst_lag_usec / 1000,
+ q->worst_lag_usec % 1000);
+ xframe_queue_clearstats(q);
+ return len;
+}
+
static int xbus_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data)
{
- xbus_t *xbus = data;
+ xbus_t *xbus;
struct xbus_poller *poller;
unsigned long flags;
int len = 0;
- int i;
+ int i = (int)data;
+ struct timeval now;
+
+ xbus = get_xbus(i);
if(!xbus)
goto out;
spin_lock_irqsave(&xbus->lock, flags);
+ do_gettimeofday(&now);
poller = xbus->poller;
- len += sprintf(page + len, "%s: CONNECTOR=%s SERIAL=[%s] STATUS=%s bus_type=%d\n",
+ len += sprintf(page + len, "%s: CONNECTOR=%s LABEL=[%s] STATUS=%s\n",
xbus->busname,
xbus->busdesc,
- xbus->serialnum,
- (xbus->hardware_exists) ? "connected" : "missing",
- xbus->bus_type
+ xbus->label,
+ (TRANSPORT_RUNNING(xbus)) ? "connected" : "missing"
);
len += sprintf(page + len, "POLLS: %d/%d\n",
atomic_read(&poller->count_poll_answers), MAX_XPDS);
len += sprintf(page + len, "XPDS_READY: %d/%d\n",
atomic_read(&poller->count_xpds_initialized),
atomic_read(&poller->count_xpds_to_initialize));
- len += sprintf(page + len, "\nmax_xframe_size=%d open_counter=%d packet_count=%d\n",
- xbus->max_xframe_size,
- xbus->open_counter,
- atomic_read(&xbus->packet_counter)
- );
- len += sprintf(page + len, "\nPLL DRIFT=%d\n", xbus->sync_adjustment);
+ len += sprintf(page + len, "\nxbus_ref_count=%d\n",
+ atomic_read(&xbus->xbus_ref_count)
+ );
+ len += xbus_fill_proc_queue(page + len, &xbus->send_pool);
+ len += xbus_fill_proc_queue(page + len, &xbus->receive_pool);
+ len += xbus_fill_proc_queue(page + len, &xbus->command_queue);
+ len += xbus_fill_proc_queue(page + len, &xbus->receive_queue);
+ len += xbus_fill_proc_queue(page + len, &xbus->pcm_tospan[0]);
+ len += xbus_fill_proc_queue(page + len, &xbus->pcm_tospan[1]);
+ if(rx_tasklet) {
+ len += sprintf(page + len, "\ncpu_rcv_intr: ");
+ for_each_online_cpu(i)
+ len += sprintf(page + len, "%5d ", xbus->cpu_rcv_intr[i]);
+ len += sprintf(page + len, "\ncpu_rcv_tasklet: ");
+ for_each_online_cpu(i)
+ len += sprintf(page + len, "%5d ", xbus->cpu_rcv_tasklet[i]);
+ len += sprintf(page + len, "\n");
+ }
+ len += sprintf(page + len, "self_ticking: %d\n", xbus->self_ticking);
+ len += sprintf(page + len, "xbus: pcm_rx_counter = %d, frag = %d\n",
+ atomic_read(&xbus->pcm_rx_counter), xbus->xbus_frag_count);
+ len += sprintf(page + len, "max_rx_process = %2ld.%ld ms\n",
+ xbus->max_rx_process / 1000,
+ xbus->max_rx_process % 1000);
+ xbus->max_rx_process = 0;
+ len += sprintf(page + len, "\nTRANSPORT: max_send_size=%d refcount=%d\n",
+ MAX_SEND_SIZE(xbus),
+ atomic_read(&xbus->transport.transport_refcount)
+ );
+ len += sprintf(page + len, "\nSYNC: [%d] %-14s: DRIFT=%d %3ld sec ago\n",
+ xbus->sync_mode, sync_mode_name(xbus->sync_mode), xbus->sync_adjustment,
+ (xbus->pll_updated_at == 0) ? 0 : now.tv_sec - xbus->pll_updated_at);
+ len += sprintf(page + len,
+ "tick timing: avg = %3d usec stddev = %4d usec (count=%ld)\n",
+ xbus->timing.tick_avg, xbus->timing.tick_stddev, xbus->timing.timing_count);
+ len += sprintf(page + len,
+ "sync_offset_usec=%ld\n", xbus->sync_offset_usec);
len += sprintf(page + len, "PCM Metrices:\n");
len += sprintf(page + len, "\tPCM TX: min=%ld max=%ld\n",
xbus->min_tx_sync, xbus->max_tx_sync);
len += sprintf(page + len, "\tPCM RX: min=%ld max=%ld\n",
xbus->min_rx_sync, xbus->max_rx_sync);
- len += sprintf(page + len, "max_rx_process=%ld\n", xbus->max_rx_process);
len += sprintf(page + len, "COUNTERS:\n");
for(i = 0; i < XBUS_COUNTER_MAX; i++) {
len += sprintf(page + len, "\t%-15s = %d\n",
@@ -1104,8 +1465,8 @@ static int xbus_read_proc(char *page, char **start, off_t off, int count, int *e
xbus->max_tx_sync = 0;
xbus->min_rx_sync = INT_MAX;
xbus->max_rx_sync = 0;
- xbus->max_rx_process = 0;
spin_unlock_irqrestore(&xbus->lock, flags);
+ put_xbus(xbus);
out:
if (len <= off+count)
*eof = 1;
@@ -1138,7 +1499,7 @@ static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count
*/
poller = xbus->poller;
BUG_ON(!poller);
- XBUS_DBG(GENERAL, xbus,
+ XBUS_DBG(DEVICES, xbus,
"Waiting for card initialization of %d XPD's max %d seconds\n",
atomic_read(&poller->count_xpds_to_initialize), INITIALIZATION_TIMEOUT/HZ);
/*
@@ -1165,7 +1526,7 @@ static int xbus_read_waitfor_xpds(char *page, char **start, off_t off, int count
XBUS_ERR(xbus, "Card Initialization Interrupted %d\n", ret);
return ret;
} else
- XBUS_DBG(GENERAL, xbus,
+ XBUS_DBG(DEVICES, xbus,
"Finished initialization of %d XPD's in %d seconds.\n",
atomic_read(&poller->count_xpds_initialized),
(INITIALIZATION_TIMEOUT - ret)/HZ);
@@ -1191,21 +1552,35 @@ out:
#ifdef PROTOCOL_DEBUG
static int proc_xbus_command_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
{
- char buf[MAX_PROC_WRITE];
+ char *buf;
xbus_t *xbus = data;
- xpacket_t *pack;
char *p;
byte *pack_start;
byte *q;
xframe_t *xframe;
+ size_t len;
+ const size_t max_len = xbus->transport.max_send_size;
+ const size_t max_text = max_len * 3 + 10;
- if(count >= MAX_PROC_WRITE) {
- XBUS_ERR(xbus, "%s: line too long\n", __FUNCTION__);
+ if(count > max_text) {
+ XBUS_ERR(xbus, "%s: line too long (%ld > %d)\n", __FUNCTION__, count, max_len);
return -EFBIG;
}
- if(copy_from_user(buf, buffer, count))
- return -EINVAL;
+ /* 3 bytes per hex-digit and space */
+ buf = kmalloc(max_text, GFP_KERNEL);
+ if(!buf)
+ return -ENOMEM;
+ if(copy_from_user(buf, buffer, count)) {
+ count = -EINVAL;
+ goto out;
+ }
buf[count] = '\0';
+ XBUS_DBG(GENERAL, xbus, "count=%ld\n", count);
+ /*
+ * We replace the content of buf[] from
+ * ascii representation to packet content
+ * as the binary representation is shorter
+ */
q = pack_start = buf;
for(p = buf; *p;) {
int val;
@@ -1218,7 +1593,8 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
if(!isxdigit(*p)) {
XBUS_ERR(xbus, "%s: bad hex value ASCII='0x%X' at position %ld\n",
__FUNCTION__, *p, (long)(p - buf));
- return -EINVAL;
+ count = -EINVAL;
+ goto out;
}
hexdigit[0] = *p++;
hexdigit[1] = '\0';
@@ -1228,21 +1604,26 @@ static int proc_xbus_command_write(struct file *file, const char __user *buffer,
if(sscanf(hexdigit, "%2X", &val) != 1) {
XBUS_ERR(xbus, "%s: bad hex value '%s' at position %ld\n",
__FUNCTION__, hexdigit, (long)(p - buf));
- return -EINVAL;
+ count = -EINVAL;
+ goto out;
}
*q++ = val;
- // XBUS_DBG(GENERAL, xbus, "'%s' val=%d\n", hexdigit, val);
+ XBUS_DBG(GENERAL, xbus, "%3d> '%s' val=%d\n", q - pack_start, hexdigit, val);
}
- xframe = xbus->ops->xframe_new(xbus, GFP_KERNEL);
- if(!xframe)
- return -ENOMEM;
- pack = xframe_next_packet(xframe, q - pack_start);
- if(!pack) {
- xbus->ops->xframe_free(xbus, xframe);
- return -ENOMEM;
+ len = q - pack_start;
+ xframe = ALLOC_SEND_XFRAME(xbus);
+ if(!xframe) {
+ count = -ENOMEM;
+ goto out;
}
- memcpy(pack, pack_start, q - pack_start); /* FRAMES: checksum? */
+ if(len > max_len)
+ len = max_len;
+ atomic_set(&xframe->frame_len, len);
+ memcpy(xframe->packets, pack_start, len); /* FIXME: checksum? */
+ dump_xframe("COMMAND", xbus, xframe);
send_cmd_frame(xbus, xframe);
+out:
+ kfree(buf);
return count;
}
#endif
@@ -1256,16 +1637,17 @@ static int read_proc_xbuses(char *page, char **start, off_t off, int count, int
spin_lock_irqsave(&xbuses_lock, flags);
for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = xbus_of(i);
+ xbus_t *xbus = get_xbus(i);
if(xbus) {
- len += sprintf(page + len, "%s: CONNECTOR=%s SERIAL=[%s] STATUS=%s bus_type=%d\n",
+ len += sprintf(page + len, "%s: CONNECTOR=%s LABEL=[%s] STATUS=%s REFCOUNT=%d\n",
xbus->busname,
xbus->busdesc,
- xbus->serialnum,
- (xbus->hardware_exists) ? "connected" : "missing",
- xbus->bus_type
+ xbus->label,
+ (TRANSPORT_RUNNING(xbus)) ? "connected" : "missing",
+ refcount_xbus(i) - 1
);
+ put_xbus(xbus);
}
}
#if 0
@@ -1283,37 +1665,69 @@ static int read_proc_xbuses(char *page, char **start, off_t off, int count, int
return len;
}
+#endif
-static int read_proc_xmitter(char *page, char **start, off_t off, int count, int *eof, void *data)
+static void transport_init(xbus_t *xbus, struct xbus_ops *ops, ushort max_send_size, void *priv)
{
- int len = 0;
- len += sprintf(page + len, "command_count: %d\n",
- command_count);
- len += sprintf(page + len, "sum_latency: %ld\n",
- sum_latency);
- if(command_count)
- len += sprintf(page + len, "average latency: %ld\n",
- sum_latency/command_count);
-#if 0
- len += sprintf(page + len, "<-- len=%d\n", len);
-#endif
- if (len <= off+count)
- *eof = 1;
- *start = page + off;
- len -= off;
- if (len > count)
- len = count;
- if (len < 0)
- len = 0;
- return len;
+ BUG_ON(!xbus);
+ BUG_ON(!ops);
+ BUG_ON(!ops->xframe_send_pcm);
+ BUG_ON(!ops->xframe_send_cmd);
+ BUG_ON(!ops->alloc_xframe);
+ BUG_ON(!ops->free_xframe);
+ xbus->transport.ops = ops;
+ xbus->transport.max_send_size = max_send_size;
+ xbus->transport.priv = priv;
+ spin_lock_init(&xbus->transport.lock);
+ atomic_set(&xbus->transport.transport_refcount, 0);
+ init_waitqueue_head(&xbus->transport.transport_unused);
+}
+
+void transport_destroy(xbus_t *xbus)
+{
+ int ret;
+ BUG_ON(!xbus);
+ xbus->transport.transport_running = 0;
+ XBUS_INFO(xbus, "Waiting... (transport_refcount=%d)\n",
+ atomic_read(&xbus->transport.transport_refcount));
+ ret = wait_event_interruptible(xbus->transport.transport_unused,
+ atomic_read(&xbus->transport.transport_refcount) == 0);
+ if(ret)
+ XBUS_ERR(xbus, "Waiting for transport_refcount interrupted!!!\n");
+ xbus->transport.ops = NULL;
+ xbus->transport.priv = NULL;
}
-#endif
+struct xbus_ops *transportops_get(xbus_t *xbus)
+{
+ struct xbus_ops *ops;
+
+ BUG_ON(!xbus);
+ atomic_inc(&xbus->transport.transport_refcount);
+ ops = xbus->transport.ops;
+ if(!ops) {
+ atomic_dec(&xbus->transport.transport_refcount);
+ return NULL;
+ }
+ return ops;
+}
+
+void transportops_put(xbus_t *xbus)
+{
+ struct xbus_ops *ops;
+
+ BUG_ON(!xbus);
+ ops = xbus->transport.ops;
+ BUG_ON(!ops);
+ if(atomic_dec_and_test(&xbus->transport.transport_refcount))
+ wake_up(&xbus->transport.transport_unused);
+}
/*------------------------- Initialization -------------------------*/
static void xbus_core_cleanup(void)
{
+ finalize_xbuses_array();
#ifdef XPP_DEBUGFS
if(debugfs_root) {
DBG(GENERAL, "Removing xpp from debugfs\n");
@@ -1327,47 +1741,19 @@ static void xbus_core_cleanup(void)
proc_xbuses = NULL;
}
#endif
-#ifdef CONFIG_PROC_FS
- if(proc_commands) {
- DBG(PROC, "Removing %s from proc\n", PROC_CMDS);
- remove_proc_entry(PROC_CMDS, xpp_proc_toplevel);
- proc_commands = NULL;
- }
-#endif
- if(xframes_cache)
- kmem_cache_destroy(xframes_cache);
}
int __init xbus_core_init(void)
{
int ret = 0;
+ initialize_xbuses_array();
#ifdef PROTOCOL_DEBUG
INFO("FEATURE: with PROTOCOL_DEBUG\n");
#endif
#ifdef XPP_DEBUGFS
INFO("FEATURE: with XPP_DEBUGFS support\n");
#endif
- xframes_cache = kmem_cache_create("xpp_frames",
- sizeof(xframe_t) + XFRAME_DATASIZE,
- 0, 0,
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
- NULL,
-#endif
- NULL);
- if(!xframes_cache) {
- return -ENOMEM;
- }
-#ifdef CONFIG_PROC_FS
- proc_commands = create_proc_read_entry(
- PROC_CMDS, 0444, xpp_proc_toplevel,
- read_proc_xmitter, NULL);
- if (!proc_commands) {
- ERR("Failed to create proc file %s\n", PROC_CMDS);
- goto err;
- }
- proc_commands->owner = THIS_MODULE;
-#endif
#ifdef CONFIG_PROC_FS
proc_xbuses = create_proc_read_entry(PROC_XBUSES, 0444, xpp_proc_toplevel, read_proc_xbuses, NULL);
if (!proc_xbuses) {
@@ -1400,9 +1786,11 @@ void __exit xbus_core_shutdown(void)
int i;
for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = xbus_of(i);
- if(xbus)
+ xbus_t *xbus = get_xbus(i);
+
+ if(xbus) {
xbus_remove(xbus);
+ }
}
BUG_ON(bus_count);
unregister_xpp_bus();
@@ -1411,16 +1799,23 @@ void __exit xbus_core_shutdown(void)
EXPORT_SYMBOL(xpd_of);
EXPORT_SYMBOL(xpd_byaddr);
+EXPORT_SYMBOL(get_xbus);
+EXPORT_SYMBOL(put_xbus);
EXPORT_SYMBOL(xbus_new);
EXPORT_SYMBOL(xbus_remove);
EXPORT_SYMBOL(xbus_activate);
EXPORT_SYMBOL(xbus_disconnect);
+EXPORT_SYMBOL(xbus_receive_xframe);
EXPORT_SYMBOL(xbus_reset_counters);
EXPORT_SYMBOL(xframe_next_packet);
EXPORT_SYMBOL(dump_xframe);
-EXPORT_SYMBOL(xframe_send);
+EXPORT_SYMBOL(send_pcm_frame);
EXPORT_SYMBOL(send_cmd_frame);
+EXPORT_SYMBOL(xframe_init);
+EXPORT_SYMBOL(transportops_get);
+EXPORT_SYMBOL(transportops_put);
EXPORT_SYMBOL(xbus_poller_notify);
+EXPORT_SYMBOL(xbus_command_queue_tick);
#ifdef XPP_DEBUGFS
EXPORT_SYMBOL(xbus_log);
#endif
diff --git a/xpp/xbus-core.h b/xpp/xbus-core.h
index d1a3167..de6e859 100644
--- a/xpp/xbus-core.h
+++ b/xpp/xbus-core.h
@@ -22,20 +22,211 @@
#ifndef XBUS_CORE_H
#define XBUS_CORE_H
+#include <linux/wait.h>
+#include <linux/interrupt.h> /* for tasklets */
#include "xpd.h"
+#include "xframe_queue.h"
+#include "xbus-pcm.h"
#define MAX_BUSES 32
#define XFRAME_DATASIZE 512
+/* forward declarations */
+struct xbus_poller;
+#ifdef XPP_DEBUGFS
+struct debugfs_data;
+#endif
+
+#ifdef __KERNEL__
+
+struct xbus_ops {
+ int (*xframe_send_pcm)(xbus_t *xbus, xframe_t *xframe);
+ int (*xframe_send_cmd)(xbus_t *xbus, xframe_t *xframe);
+ xframe_t *(*alloc_xframe)(xbus_t *xbus, gfp_t gfp_flags);
+ void (*free_xframe)(xbus_t *xbus, xframe_t *xframe);
+};
+
+/*
+ * XBUS statistics counters
+ */
+enum {
+ XBUS_N_DESC_REQ,
+ XBUS_N_DEV_DESC_FULL,
+ XBUS_N_DEV_DESC_EMPTY,
+ XBUS_N_TX_XFRAME_PCM,
+ XBUS_N_RX_XFRAME_PCM,
+ XBUS_N_TX_PACK_PCM,
+ XBUS_N_RX_PACK_PCM,
+ XBUS_N_TX_BYTES,
+ XBUS_N_RX_BYTES,
+ XBUS_N_TX_PCM_FRAG,
+ XBUS_N_TX_CMD,
+};
+
+#define XBUS_COUNTER(xbus, counter) ((xbus)->counters[XBUS_N_ ## counter])
+
+#define C_(x) [ XBUS_N_ ## x ] = { #x }
+
+/* yucky, make an instance so we can size it... */
+static struct xbus_counters {
+ char *name;
+} xbus_counters[] = {
+ C_(DESC_REQ),
+ C_(DEV_DESC_FULL),
+ C_(DEV_DESC_EMPTY),
+ C_(TX_XFRAME_PCM),
+ C_(RX_XFRAME_PCM),
+ C_(TX_PACK_PCM),
+ C_(RX_PACK_PCM),
+ C_(TX_BYTES),
+ C_(RX_BYTES),
+ C_(TX_PCM_FRAG),
+ C_(TX_CMD),
+};
+
+#undef C_
+
+#define XBUS_COUNTER_MAX ARRAY_SIZE(xbus_counters)
+
+struct xbus_transport {
+ struct xbus_ops *ops;
+ void *priv;
+ ushort max_send_size;
+ bool transport_running; /* Hardware is functional */
+ atomic_t transport_refcount;
+ wait_queue_head_t transport_unused;
+ spinlock_t lock;
+};
+
+#define MAX_SEND_SIZE(xbus) ((xbus)->transport.max_send_size)
+#define TRANSPORT_RUNNING(xbus) ((xbus)->transport.transport_running)
+#define TRANSPORT_EXIST(xbus) ((xbus)->transport.ops != NULL)
+
+struct xbus_ops *transportops_get(xbus_t *xbus);
+void transportops_put(xbus_t *xbus);
+
+/*
+ * Allocate/Free an xframe from pools of empty xframes.
+ * Calls to {get,put}_xframe are wrapped in
+ * the macros bellow, so we take/return it
+ * to the correct pool.
+ */
+xframe_t *get_xframe(struct xframe_queue *q);
+void put_xframe(struct xframe_queue *q, xframe_t *xframe);
+
+#define ALLOC_SEND_XFRAME(xbus) get_xframe(&(xbus)->send_pool)
+#define ALLOC_RECV_XFRAME(xbus) get_xframe(&(xbus)->receive_pool)
+#define FREE_SEND_XFRAME(xbus, xframe) put_xframe(&(xbus)->send_pool, (xframe))
+#define FREE_RECV_XFRAME(xbus, xframe) put_xframe(&(xbus)->receive_pool, (xframe))
+
+xbus_t *get_xbus(uint num);
+void put_xbus(xbus_t *xbus);
+
+/*
+ * An xbus is a transport layer for Xorcom Protocol commands
+ */
+struct xbus {
+ char busname[XBUS_NAMELEN]; /* set by xbus_new() */
+
+ /* low-level bus drivers set these 2 fields */
+ char busdesc[XBUS_DESCLEN];
+ char label[LABEL_SIZE];
+ struct xbus_transport transport;
+
+ int num;
+ struct xpd *xpds[MAX_XPDS];
+
+ struct xframe_queue command_queue;
+ wait_queue_head_t command_queue_empty;
+
+ struct xframe_queue send_pool; /* empty xframes for send */
+ struct xframe_queue receive_pool; /* empty xframes for receive */
+
+ /* tasklet processing */
+ struct xframe_queue receive_queue;
+ struct tasklet_struct receive_tasklet;
+ int cpu_rcv_intr[NR_CPUS];
+ int cpu_rcv_tasklet[NR_CPUS];
+
+ bool self_ticking;
+ enum sync_mode sync_mode;
+ struct timer_list command_timer;
+ unsigned int xbus_frag_count;
+ struct xframe_queue pcm_tospan[2]; /* double buffer */
+ struct xpp_timing timing;
+ atomic_t pcm_rx_counter;
+ unsigned int global_counter;
+ long sync_offset_usec;
+
+ /* Device-Model */
+ struct device astribank;
+#define dev_to_xbus(dev) container_of(dev, struct xbus, astribank)
+
+ spinlock_t lock;
+ atomic_t xbus_ref_count; /* How many need this struct? */
+
+ /* PCM metrics */
+ struct timeval last_tx_sync;
+ struct timeval last_rx_sync;
+ unsigned long max_tx_sync;
+ unsigned long min_tx_sync;
+ unsigned long max_rx_sync;
+ unsigned long min_rx_sync;
+ unsigned long max_rx_process; /* packet processing time (usec) */
+
+ struct xbus_poller *poller;
+
+ /*
+ * Sync adjustment
+ */
+ int sync_adjustment;
+ int sync_adjustment_offset;
+ long pll_updated_at;
+
+ struct rw_semaphore in_use;
+#define XBUS_GET(xbus) down_read_trylock(&(xbus)->in_use)
+#define XBUS_PUT(xbus) up_read(&(xbus)->in_use)
+
+ int num_xpds;
+
+#ifdef XPP_DEBUGFS
+ struct dentry *debugfs_dir;
+ struct dentry *debugfs_file;
+ struct debugfs_data *debugfs_data;
+#endif
+#ifdef CONFIG_PROC_FS
+ struct proc_dir_entry *proc_xbus_dir;
+ struct proc_dir_entry *proc_xbus_summary;
+#ifdef PROTOCOL_DEBUG
+ struct proc_dir_entry *proc_xbus_command;
+#endif
+#endif
+
+ /* statistics */
+ int counters[XBUS_COUNTER_MAX];
+};
+#endif
+
+#define XFRAME_MAGIC 123456L
+
struct xframe {
+ unsigned long xframe_magic;
struct list_head frame_list;
atomic_t frame_len;
xbus_t *xbus;
struct timeval tv_created;
+ struct timeval tv_queued;
+ struct timeval tv_submitted;
struct timeval tv_received;
+ /* filled by transport layer */
+ size_t frame_maxlen;
byte *packets; /* max XFRAME_DATASIZE */
+ byte *first_free;
+ void *priv;
};
+void xframe_init(xbus_t *xbus, xframe_t *xframe, void *buf, size_t maxsize, void *priv);
+
#define XFRAME_LEN(frame) atomic_read(&(frame)->frame_len)
int xbus_core_init(void); /* Initializer */
@@ -47,10 +238,7 @@ int xbus_log(xbus_t *xbus, xpd_t *xpd, int direction, const void *buf, unsigned
#endif
/* Frame handling */
-xframe_t *xbus_frame_new(xbus_t *xbus, gfp_t flags);
-void xbus_frame_free(xbus_t *xbus, xframe_t *p);
void dump_xframe(const char msg[], const xbus_t *xbus, const xframe_t *xframe);
-int xframe_send(xbus_t *xbus, xframe_t *xframe);
int send_cmd_frame(xbus_t *xbus, xframe_t *xframe);
/*
@@ -68,17 +256,15 @@ xpacket_t *xframe_next_packet(xframe_t *xframe, int len);
#define XBUS_UNIT(idx) ((idx) / MAX_SUBUNIT)
#define XBUS_SUBUNIT(idx) ((idx) % MAX_SUBUNIT)
-xbus_t *xbus_of(int xbus_num);
xpd_t *xpd_of(const xbus_t *xbus, int xpd_num);
xpd_t *xpd_byaddr(const xbus_t *xbus, uint unit, uint subunit);
-xbus_t *xbus_new(xbus_ops_t *ops, size_t xframe_size);
+xbus_t *xbus_new(struct xbus_ops *ops, ushort max_send_size, void *priv);
void xbus_remove(xbus_t *xbus);
-void xbus_activate(xbus_t *xbus);
+int xbus_activate(xbus_t *xbus);
void xbus_disconnect(xbus_t *xbus);
+void xbus_receive_xframe(xbus_t *xbus, xframe_t *xframe);
void xbus_poller_notify(xbus_t *xbus, struct card_desc_struct *card_desc);
-void xbus_reset_counters(xbus_t *xbus);
-
int xbus_register_xpd(xbus_t *xbus, xpd_t *xpd);
int xbus_unregister_xpd(xbus_t *xbus, xpd_t *xpd);
diff --git a/xpp/xbus-pcm.c b/xpp/xbus-pcm.c
new file mode 100644
index 0000000..eb63b11
--- /dev/null
+++ b/xpp/xbus-pcm.c
@@ -0,0 +1,1156 @@
+/*
+ * Written by Oron Peled <oron@actcom.co.il>
+ * Copyright (C) 2004-2007, Xorcom
+ *
+ * All rights reserved.
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+#include <linux/version.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+# warning "This module is tested only with 2.6 kernels"
+#endif
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include "xbus-pcm.h"
+#include "xbus-core.h"
+#include "xpp_zap.h"
+#include "zap_debug.h"
+#include "parport_debug.h"
+
+static const char rcsid[] = "$Id$";
+
+extern int print_dbg;
+#ifdef XPP_EC_CHUNK
+#include "supress/ec_xpp.h"
+DEF_PARM_BOOL(xpp_ec, 0, 0444, "Do we use our own (1) or Zaptel's (0) echo canceller");
+#endif
+
+DEF_PARM(int, disable_pcm, 0, 0644, "Disable all PCM transmissions");
+#ifdef DEBUG_PCMTX
+DEF_PARM(int, pcmtx, -1, 0644, "Forced PCM value to transmit (negative to disable)");
+DEF_PARM(int, pcmtx_chan, 0, 0644, "channel to force PCM value");
+#endif
+DEF_PARM_BOOL(pcm_tasklet, 0, 0644, "Handle PCM in a tasklet (lower interrupt load)");
+#define PCM_TASKLET_DEPRECATION "\n" \
+ "====================================================================\n" \
+ "CONFIGURATION ERROR: 'pcm_tasklet' module parameter is deprecated!!!\n" \
+ "====================================================================\n"
+
+static xbus_t *syncer; /* current syncer */
+static struct xpp_timing ref_sync;
+static atomic_t xpp_tick_counter;
+static const struct xpp_timing *global_ticker; /* increment xpp_tick_counter */
+static bool zaptel_syncer = 0;
+
+#define PROC_SYNC "sync"
+#define BIG_TICK_INTERVAL 1000
+#define SYNC_ADJ_MIN (-30) /* minimal firmware drift unit */
+#define SYNC_ADJ_MAX 30 /* maximal firmware drift unit */
+#define SYNC_ADJ_FACTOR(x) ((x) / 30) /* average usec/drift_unit */
+
+#ifdef ZAPTEL_SYNC_TICK
+static unsigned int zaptel_tick_count = 0;
+#endif
+
+/*------------------------- SYNC Handling --------------------------*/
+
+
+const char *sync_mode_name(enum sync_mode mode)
+{
+ static const char *sync_mode_names[] = {
+ [SYNC_MODE_AB] "SYNC_MODE_AB",
+ [SYNC_MODE_NONE] "SYNC_MODE_NONE",
+ [SYNC_MODE_PLL] "SYNC_MODE_PLL",
+ [SYNC_MODE_QUERY] "SYNC_MODE_QUERY",
+ };
+ if(mode >= ARRAY_SIZE(sync_mode_names))
+ return NULL;
+ return sync_mode_names[mode];
+}
+
+static void xpp_set_syncer(xbus_t *xbus, bool on)
+{
+ if(syncer != xbus && on) {
+ XBUS_DBG(SYNC, xbus, "New syncer\n");
+ syncer = xbus;
+ } else if(syncer == xbus && !on) {
+ XBUS_DBG(SYNC, xbus, "Lost syncer\n");
+ syncer = NULL;
+ } else
+ XBUS_DBG(SYNC, xbus, "ignore %s (current syncer: %s)\n",
+ (on)?"ON":"OFF",
+ (syncer) ? syncer->busname : "NO-SYNC");
+}
+
+void xpp_timing_init(struct xpp_timing *timing, const char *name)
+{
+ memset(timing, 0, sizeof(*timing));
+ do_gettimeofday(&timing->timing_val);
+ spin_lock_init(&timing->lock);
+ timing->name = name;
+}
+
+#define XPP_TIMING_SAMPLES 50
+#define XPP_TIMING_TICKS 100
+#define XPP_TIMING_MAX_STDDEV 500
+
+static void xpp_timing_tick(struct xpp_timing *timing, const struct timeval *val)
+{
+ long usec;
+ int diff_sec;
+ int diff_usec;
+ unsigned long flags;
+
+ spin_lock_irqsave(&timing->lock, flags);
+ if((timing->timing_count % XPP_TIMING_TICKS) != 0)
+ goto out;
+ diff_sec = val->tv_sec - timing->timing_val.tv_sec;
+ diff_usec = val->tv_usec - timing->timing_val.tv_usec;
+ timing->timing_val = *val;
+ /* ignore first batch of samples */
+ if(timing->timing_count < (XPP_TIMING_TICKS * XPP_TIMING_SAMPLES))
+ goto out;
+ if(abs(diff_sec) > 2) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0)
+ NOTICE("TIMING(%s): bad timing: diff_sec=%d\n",
+ timing->name, diff_sec);
+ goto out;
+ }
+ usec = diff_sec * 1000000 + diff_usec;
+ if(usec)
+ timing->tick_rate = XPP_TIMING_TICKS * 1000000 / usec;
+ usec -= 1000 * XPP_TIMING_TICKS; /* normalize */
+
+ timing->accumulated_usec += usec;
+ timing->accumulated_usec_sqr += usec * usec;
+ if((timing->timing_count % (XPP_TIMING_TICKS * XPP_TIMING_SAMPLES)) == 0) {
+ int avg;
+ int stddev;
+
+ avg = timing->accumulated_usec / XPP_TIMING_SAMPLES;
+ stddev = (timing->accumulated_usec_sqr / XPP_TIMING_SAMPLES);
+ stddev = int_sqrt(stddev);
+ timing->accumulated_usec = 0;
+ timing->accumulated_usec_sqr = 0;
+ if(stddev > XPP_TIMING_MAX_STDDEV) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0)
+ NOTICE("TIMING(%s): bad timing: stddev=%d avg=%d\n",
+ timing->name, stddev, avg);
+ goto out;
+ }
+ timing->tick_avg = avg;
+ timing->tick_stddev = stddev;
+ }
+out:
+ timing->timing_count++;
+ if(timing == global_ticker)
+ atomic_inc(&xpp_tick_counter);
+ spin_unlock_irqrestore(&timing->lock, flags);
+}
+
+void xbus_command_timer(unsigned long param)
+{
+ xbus_t *xbus = (xbus_t *)param;
+ struct timeval now;
+
+ BUG_ON(!xbus);
+ do_gettimeofday(&now);
+ xbus_command_queue_tick(xbus);
+ if(!xbus->self_ticking)
+ mod_timer(&xbus->command_timer, jiffies + 1); /* Must be 1KHz rate */
+}
+
+void xbus_set_command_timer(xbus_t *xbus, bool on)
+{
+ XBUS_DBG(SYNC, xbus, "%s\n", (on)?"ON":"OFF");
+ if(on) {
+ if(!timer_pending(&xbus->command_timer)) {
+ XBUS_DBG(SYNC, xbus, "add_timer\n");
+ xbus->command_timer.function = xbus_command_timer;
+ xbus->command_timer.data = (unsigned long)xbus;
+ xbus->command_timer.expires = jiffies + 1;
+ add_timer(&xbus->command_timer);
+ xbus->self_ticking = 0;
+ }
+ } else if(timer_pending(&xbus->command_timer)) {
+ xbus->self_ticking = 1;
+ XBUS_DBG(SYNC, xbus, "del_timer\n");
+ del_timer(&xbus->command_timer);
+ }
+}
+
+/*
+ * Called when the Astribank replies to a sync change request
+ */
+void got_new_syncer(xbus_t *xbus, enum sync_mode mode, int drift)
+{
+ unsigned long flags;
+
+ XBUS_DBG(SYNC, xbus, "%s (%d), drift=%d (pcm_rx_counter=%d)\n",
+ sync_mode_name(mode), mode, drift, atomic_read(&xbus->pcm_rx_counter));
+ spin_lock_irqsave(&xbus->lock, flags);
+ xbus->sync_adjustment = (signed char)drift;
+ if(xbus->sync_mode == mode) {
+ XBUS_DBG(SYNC, xbus, "Already in %s. Ignored\n", sync_mode_name(mode));
+ goto out;
+ }
+ switch(mode) {
+ case SYNC_MODE_AB:
+ xbus->sync_mode = mode;
+ xbus_set_command_timer(xbus, 0);
+ xpp_set_syncer(xbus, 1);
+ break;
+ case SYNC_MODE_PLL:
+ xbus->sync_mode = mode;
+ xbus_set_command_timer(xbus, 0);
+ xpp_set_syncer(xbus, 0);
+ break;
+ case SYNC_MODE_NONE: /* lost sync source */
+ xbus->sync_mode = mode;
+ xbus_set_command_timer(xbus, 1);
+ xpp_set_syncer(xbus, 0);
+ break;
+ case SYNC_MODE_QUERY: /* ignore */
+ break;
+ default:
+ XBUS_ERR(xbus, "%s: unknown mode=0x%X\n", __FUNCTION__, mode);
+ }
+out:
+ spin_unlock_irqrestore(&xbus->lock, flags);
+}
+
+void xbus_request_sync(xbus_t *xbus, enum sync_mode mode)
+{
+ BUG_ON(!xbus);
+ XBUS_DBG(SYNC, xbus, "sent request (mode=%d)\n", mode);
+ CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, mode, 0);
+}
+
+static void reset_sync_counters(void)
+{
+ int i;
+
+ //DBG(SYNC, "%d\n", atomic_read(&xpp_tick_counter));
+ for(i = 0; i < MAX_BUSES; i++) {
+ xbus_t *xbus = get_xbus(i);
+
+ if(!xbus)
+ continue;
+ if (TRANSPORT_RUNNING(xbus)) {
+ if(XBUS_GET(xbus)) {
+ /* Reset sync LEDs once in a while */
+ CALL_PROTO(GLOBAL, RESET_SYNC_COUNTERS, xbus, NULL);
+ XBUS_PUT(xbus);
+ } else {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0)
+ XBUS_DBG(GENERAL, xbus,
+ "Dropped packet. Is shutting down. (%d)\n", rate_limit);
+ }
+ }
+ put_xbus(xbus);
+ }
+}
+
+static void send_drift(xbus_t *xbus, int drift)
+{
+ struct timeval now;
+ const char *msg;
+
+ BUG_ON(drift < SYNC_ADJ_MIN || drift > SYNC_ADJ_MAX);
+ do_gettimeofday(&now);
+ if(drift > xbus->sync_adjustment)
+ msg = "up";
+ else
+ msg = "down";
+ XBUS_DBG(SYNC, xbus, "DRIFT adjust %s (%d) (last update %ld seconds ago)\n",
+ msg, drift, now.tv_sec - xbus->pll_updated_at);
+ CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_PLL, drift);
+ xbus->pll_updated_at = now.tv_sec;
+}
+
+#ifdef ZAPTEL_SYNC_TICK
+int zaptel_sync_tick(struct zt_span *span, int is_master)
+{
+ xpd_t *xpd = span->pvt;
+ struct timeval now;
+ static int redundant_ticks; /* for extra spans */
+
+ if(!zaptel_syncer)
+ goto noop;
+ BUG_ON(!xpd);
+ /*
+ * Detect if any of our spans is zaptel sync master
+ */
+ if(is_master) {
+ static int rate_limit;
+
+ if(xpd->xbus != syncer && ((rate_limit % 1003) == 0)) {
+ XPD_ERR(xpd,
+ "Zaptel master, but syncer=%s\n",
+ xpd->xbus->busname);
+ }
+ if((rate_limit % 5003) == 0)
+ XPD_NOTICE(xpd, "Zaptel master: ignore ZAPTEL sync\n");
+ rate_limit++;
+ goto noop;
+ }
+ /* Now we know for sure someone else is zaptel sync master */
+ if(syncer) {
+ static int rate_limit;
+
+ if((rate_limit++ % 5003) == 0)
+ XBUS_DBG(SYNC, syncer,
+ "Already a syncer, ignore ZAPTEL sync\n");
+ goto noop;
+ }
+ /* ignore duplicate calls from all our registered spans */
+ if((redundant_ticks++ % total_registered_spans()) != 0) {
+#if 0
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) < 16)
+ XPD_NOTICE(xpd, "boop (%d)\n", zaptel_tick_count);
+#endif
+ goto noop;
+ }
+ do_gettimeofday(&now);
+ xpp_timing_tick(&ref_sync, &now);
+ zaptel_tick_count++;
+ flip_parport_bit(1);
+ return 0;
+noop:
+ return 0; /* No auto sync from zaptel */
+}
+#endif
+
+
+static void sync_rate_adjust(xbus_t *xbus)
+{
+ int offset;
+
+ xbus->sync_offset_usec = xbus->timing.tick_avg - ref_sync.tick_avg;
+ /* Calculate required PLL fix */
+ offset = SYNC_ADJ_FACTOR(xbus->sync_offset_usec);
+ if(offset < SYNC_ADJ_MIN)
+ offset = SYNC_ADJ_MIN;
+ if(offset > SYNC_ADJ_MAX)
+ offset = SYNC_ADJ_MAX;
+ xbus->sync_adjustment_offset = offset;
+ if(xbus != syncer && xbus->sync_adjustment != offset)
+ send_drift(xbus, offset);
+}
+
+/*
+ * called from elect_syncer()
+ * if new_syncer is NULL, than we move all to SYNC_MODE_PLL
+ * for ZAPTEL sync.
+ */
+static void update_sync_master(xbus_t *new_syncer)
+{
+ const char *msg = (zaptel_syncer) ? "ZAPTEL" : "NO-SYNC";
+ int i;
+
+ DBG(SYNC, "%s => %s\n",
+ (syncer) ? syncer->busname : msg,
+ (new_syncer) ? new_syncer->busname : msg);
+ if(new_syncer) {
+ XBUS_DBG(SYNC, new_syncer, "pcm_rx_counter=%d\n",
+ atomic_read(&new_syncer->pcm_rx_counter));
+ zaptel_syncer = 0;
+ global_ticker = &new_syncer->timing;
+ xbus_request_sync(new_syncer, SYNC_MODE_AB);
+ } else
+ global_ticker = &ref_sync;
+ DBG(SYNC, "stop unwanted syncers\n");
+ /* Shut all down except the wanted sync master */
+ for(i = 0; i < MAX_BUSES; i++) {
+ xbus_t *xbus = get_xbus(i);
+ if(!xbus)
+ continue;
+ if(TRANSPORT_RUNNING(xbus) && xbus != new_syncer) {
+ if(xbus->self_ticking)
+ xbus_request_sync(xbus, SYNC_MODE_PLL);
+ else
+ XBUS_DBG(SYNC, xbus, "Not self_ticking yet. Ignore\n");
+ }
+ put_xbus(xbus);
+ }
+}
+
+void elect_syncer(const char *msg)
+{
+ int i;
+ int j;
+ uint timing_priority = 0;
+ xpd_t *best_xpd = NULL;
+ xbus_t *the_xbus = NULL;
+
+ for(i = 0; i < MAX_BUSES; i++) {
+ xbus_t *xbus = get_xbus(i);
+ if(!xbus)
+ continue;
+ if(!the_xbus)
+ the_xbus = xbus;
+ if (TRANSPORT_RUNNING(xbus)) {
+ for(j = 0; j < MAX_XPDS; j++) {
+ xpd_t *xpd = xpd_of(xbus, j);
+
+ if(!xpd)
+ continue;
+ if(xpd->timing_priority > timing_priority) {
+ timing_priority = xpd->timing_priority;
+ best_xpd = xpd;
+ }
+ }
+ }
+ put_xbus(xbus);
+ }
+ if(best_xpd) {
+ the_xbus = best_xpd->xbus;
+ XPD_DBG(SYNC, best_xpd, "%s: elected with priority %d\n", msg, timing_priority);
+ } else if(the_xbus) {
+ XBUS_DBG(SYNC, the_xbus, "%s: elected\n", msg);
+ } else
+ DBG(SYNC, "%s: No more syncers\n", msg);
+ if(the_xbus != syncer)
+ update_sync_master(the_xbus);
+}
+
+/*
+ * This function is used by FXS/FXO. The pcm_mask argument signifies
+ * channels which should be *added* to the automatic calculation.
+ * Normally, this argument is 0.
+ *
+ * The caller should spinlock the XPD before calling it.
+ */
+void __pcm_recompute(xpd_t *xpd, xpp_line_t pcm_mask)
+{
+ int i;
+ int line_count = 0;
+
+ /* Add/remove all the trivial cases */
+ pcm_mask |= xpd->offhook;
+ pcm_mask |= xpd->cid_on;
+ pcm_mask &= ~xpd->digital_signalling; /* No PCM in D-Channels */
+ pcm_mask &= ~xpd->digital_inputs;
+ pcm_mask &= ~xpd->digital_outputs;
+ for_each_line(xpd, i)
+ if(IS_SET(pcm_mask, i))
+ line_count++;
+ /*
+ * FIXME: Workaround a bug in sync code of the Astribank.
+ * Send dummy PCM for sync.
+ */
+ if(xpd->addr.unit == 0 && pcm_mask == 0) {
+ pcm_mask = BIT(0);
+ line_count = 1;
+ }
+ xpd->pcm_len = (line_count)
+ ? RPACKET_HEADERSIZE + sizeof(xpp_line_t) + line_count * ZT_CHUNKSIZE
+ : 0L;
+ xpd->wanted_pcm_mask = pcm_mask;
+}
+
+/*
+ * A spinlocked version of __pcm_recompute()
+ */
+void pcm_recompute(xpd_t *xpd, xpp_line_t pcm_mask)
+{
+ unsigned long flags;
+
+ spin_lock_irqsave(&xpd->lock, flags);
+ __pcm_recompute(xpd, pcm_mask);
+ spin_unlock_irqrestore(&xpd->lock, flags);
+}
+
+void fill_beep(u_char *buf, int num, int duration)
+{
+ bool alternate = (duration) ? (jiffies/(duration*1000)) & 0x1 : 0;
+ int which;
+ u_char *snd;
+
+ /*
+ * debug tones
+ */
+ static u_char beep[] = {
+ 0x7F, 0xBE, 0xD8, 0xBE, 0x80, 0x41, 0x24, 0x41, /* Dima */
+ 0x67, 0x90, 0x89, 0x90, 0xFF, 0x10, 0x09, 0x10, /* Izzy */
+ };
+ static u_char beep_alt[] = {
+ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, /* silence */
+ };
+ if(alternate) {
+ which = num % ARRAY_SIZE(beep_alt);
+ snd = &beep_alt[which];
+ } else {
+ which = num % ARRAY_SIZE(beep);
+ snd = &beep[which];
+ }
+ memcpy(buf, snd, ZT_CHUNKSIZE);
+}
+
+#ifdef XPP_EC_CHUNK
+/*
+ * Taken from zaptel.c
+ */
+static inline void xpp_ec_chunk(struct zt_chan *chan, unsigned char *rxchunk, const unsigned char *txchunk)
+{
+ int16_t rxlin;
+ int x;
+ unsigned long flags;
+
+ /* Perform echo cancellation on a chunk if necessary */
+ if (!chan->ec)
+ return;
+ spin_lock_irqsave(&chan->lock, flags);
+ for (x=0;x<ZT_CHUNKSIZE;x++) {
+ rxlin = ZT_XLAW(rxchunk[x], chan);
+ rxlin = xpp_echo_can_update(chan->ec, ZT_XLAW(txchunk[x], chan), rxlin);
+ rxchunk[x] = ZT_LIN2X((int)rxlin, chan);
+ }
+ spin_unlock_irqrestore(&chan->lock, flags);
+}
+#endif
+
+static void do_ec(xpd_t *xpd)
+{
+ struct zt_chan *chans = xpd->span.chans;
+ int i;
+
+#ifdef WITH_ECHO_SUPPRESSION
+ /* FIXME: need to Echo cancel double buffered data */
+ for (i = 0;i < xpd->span.channels; i++) {
+ if(unlikely(IS_SET(xpd->digital_signalling, i))) /* Don't echo cancel PRI/BRI D-chans */
+ continue;
+#ifdef XPP_EC_CHUNK
+ /* even if defined, parameterr xpp_ec can override at run-time */
+ if (xpp_ec)
+ xpp_ec_chunk(&chans[i], chans[i].readchunk, xpd->ec_chunk2[i]);
+ else
+#endif
+ zt_ec_chunk(&chans[i], chans[i].readchunk, xpd->ec_chunk2[i]);
+ memcpy(xpd->ec_chunk2[i], xpd->ec_chunk1[i], ZT_CHUNKSIZE);
+ memcpy(xpd->ec_chunk1[i], chans[i].writechunk, ZT_CHUNKSIZE);
+ }
+#endif
+}
+
+#if 0
+/* Okay, now we get to the signalling. You have several options: */
+
+/* Option 1: If you're a T1 like interface, you can just provide a
+ rbsbits function and we'll assert robbed bits for you. Be sure to
+ set the ZT_FLAG_RBS in this case. */
+
+/* Opt: If the span uses A/B bits, set them here */
+int (*rbsbits)(struct zt_chan *chan, int bits);
+
+/* Option 2: If you don't know about sig bits, but do have their
+ equivalents (i.e. you can disconnect battery, detect off hook,
+ generate ring, etc directly) then you can just specify a
+ sethook function, and we'll call you with appropriate hook states
+ to set. Still set the ZT_FLAG_RBS in this case as well */
+int (*hooksig)(struct zt_chan *chan, zt_txsig_t hookstate);
+
+/* Option 3: If you can't use sig bits, you can write a function
+ which handles the individual hook states */
+int (*sethook)(struct zt_chan *chan, int hookstate);
+#endif
+
+int xpp_echocan(struct zt_chan *chan, int len)
+{
+#ifdef XPP_EC_CHUNK
+ if(len == 0) { /* shut down */
+ /* zaptel calls this also during channel initialization */
+ if(chan->ec) {
+ xpp_echo_can_free(chan->ec);
+ }
+ return 0;
+ }
+ if(chan->ec) {
+ ERR("%s: Trying to override an existing EC (%p)\n", __FUNCTION__, chan->ec);
+ return -EINVAL;
+ }
+ chan->ec = xpp_echo_can_create(len, 0);
+ if(!chan->ec) {
+ ERR("%s: Failed creating xpp EC (len=%d)\n", __FUNCTION__, len);
+ return -EINVAL;
+ }
+#endif
+ return 0;
+}
+
+static bool pcm_valid(xpd_t *xpd, xpacket_t *pack)
+{
+ xpp_line_t lines = RPACKET_FIELD(pack, GLOBAL, PCM_READ, lines);
+ int i;
+ int count = 0;
+ uint16_t good_len;
+
+ BUG_ON(!pack);
+ BUG_ON(XPACKET_OP(pack) != XPROTO_NAME(GLOBAL, PCM_READ));
+ /*
+ * Don't use for_each_line(xpd, i) here because for BRI it will
+ * ignore the channels of the other xpd's in the same unit.
+ */
+ for (i = 0; i < CHANNELS_PERXPD; i++)
+ if(IS_SET(lines, i))
+ count++;
+ /* FRAMES: include opcode in calculation */
+ good_len = RPACKET_HEADERSIZE + sizeof(xpp_line_t) + count * 8;
+ if(XPACKET_LEN(pack) != good_len) {
+ static int rate_limit = 0;
+
+ XPD_COUNTER(xpd, RECV_ERRORS)++;
+ if((rate_limit++ % 1000) <= 10) {
+ XPD_ERR(xpd, "BAD PCM REPLY: packet_len=%d (should be %d), count=%d\n",
+ XPACKET_LEN(pack), good_len, count);
+ dump_packet("BAD PCM REPLY", pack, 1);
+ }
+ return 0;
+ }
+ return 1;
+}
+
+
+
+static inline void pcm_frame_out(xbus_t *xbus, xframe_t *xframe)
+{
+ unsigned long flags;
+ struct timeval now;
+ unsigned long usec;
+
+ spin_lock_irqsave(&xbus->lock, flags);
+ do_gettimeofday(&now);
+ if(unlikely(disable_pcm || !TRANSPORT_RUNNING(xbus)))
+ goto dropit;
+ if(XPACKET_ADDR((xpacket_t *)xframe->packets).sync_master) {
+ usec = usec_diff(&now, &xbus->last_tx_sync);
+ xbus->last_tx_sync = now;
+ /* ignore startup statistics */
+ if(likely(atomic_read(&xbus->pcm_rx_counter) > BIG_TICK_INTERVAL)) {
+ if(abs(usec - 1000) > TICK_TOLERANCE) {
+ static int rate_limit;
+
+ if((rate_limit++ % 5003) == 0)
+ XBUS_DBG(SYNC, xbus, "Bad PCM TX timing(%d): usec=%ld.\n",
+ rate_limit, usec);
+ }
+ if(usec > xbus->max_tx_sync)
+ xbus->max_tx_sync = usec;
+ if(usec < xbus->min_tx_sync)
+ xbus->min_tx_sync = usec;
+ }
+ }
+ spin_unlock_irqrestore(&xbus->lock, flags);
+ /* OK, really send it */
+ if(print_dbg & DBG_PCM )
+ dump_xframe("TX_XFRAME_PCM", xbus, xframe);
+ send_pcm_frame(xbus, xframe);
+ XBUS_COUNTER(xbus, TX_XFRAME_PCM)++;
+ return;
+dropit:
+ spin_unlock_irqrestore(&xbus->lock, flags);
+ FREE_SEND_XFRAME(xbus, xframe);
+}
+
+/*
+ * Generic implementations of card_pcmfromspan()/card_pcmtospan()
+ * For FXS/FXO
+ */
+void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xpacket_t *pack)
+{
+ byte *pcm;
+ struct zt_chan *chans;
+ unsigned long flags;
+ int i;
+
+ BUG_ON(!xbus);
+ BUG_ON(!xpd);
+ BUG_ON(!pack);
+ RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = lines;
+ pcm = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, pcm);
+ spin_lock_irqsave(&xpd->lock, flags);
+ chans = xpd->span.chans;
+ for (i = 0; i < xpd->channels; i++) {
+ if(IS_SET(lines, i)) {
+ if(SPAN_REGISTERED(xpd)) {
+#ifdef DEBUG_PCMTX
+ if(pcmtx >= 0 && pcmtx_chan == i)
+ memset((u_char *)pcm, pcmtx, ZT_CHUNKSIZE);
+ else
+#endif
+ memcpy((u_char *)pcm, chans[i].writechunk, ZT_CHUNKSIZE);
+ // fill_beep((u_char *)pcm, xpd->addr.subunit, 2);
+ } else
+ memset((u_char *)pcm, 0x7F, ZT_CHUNKSIZE);
+ pcm += ZT_CHUNKSIZE;
+ }
+ }
+ XPD_COUNTER(xpd, PCM_WRITE)++;
+ spin_unlock_irqrestore(&xpd->lock, flags);
+}
+
+void generic_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
+{
+ byte *pcm;
+ xpp_line_t pcm_mask;
+ unsigned long flags;
+ int i;
+
+ pcm = RPACKET_FIELD(pack, GLOBAL, PCM_READ, pcm);
+ pcm_mask = RPACKET_FIELD(pack, GLOBAL, PCM_READ, lines);
+ spin_lock_irqsave(&xpd->lock, flags);
+ if(!SPAN_REGISTERED(xpd))
+ goto out;
+ for (i = 0; i < xpd->channels; i++) {
+ volatile u_char *r = xpd->span.chans[i].readchunk;
+
+ if(!IS_SET(xpd->wanted_pcm_mask, i))
+ continue;
+ pcm_mask &= ~xpd->mute_dtmf;
+ if(IS_SET(pcm_mask, i)) {
+ // memset((u_char *)r, 0x5A, ZT_CHUNKSIZE); // DEBUG
+ // fill_beep((u_char *)r, 1, 1); // DEBUG: BEEP
+ memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
+ pcm += ZT_CHUNKSIZE;
+ } else {
+ memset((u_char *)r, 0x7F, ZT_CHUNKSIZE); // SILENCE
+ }
+ }
+out:
+ XPD_COUNTER(xpd, PCM_READ)++;
+ spin_unlock_irqrestore(&xpd->lock, flags);
+}
+
+static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
+{
+ byte *xframe_end;
+ xpacket_t *pack;
+ byte *p;
+ int ret = -EPROTO; /* Assume error */
+
+ if(print_dbg & DBG_PCM)
+ dump_xframe("RX_XFRAME_PCM", xbus, xframe);
+ /* handle content */
+
+ p = xframe->packets;
+ xframe_end = p + XFRAME_LEN(xframe);
+ do {
+ int len;
+ xpd_t *xpd;
+
+ pack = (xpacket_t *)p;
+ len = XPACKET_LEN(pack);
+ /* Sanity checks */
+ if(unlikely(XPACKET_OP(pack) != XPROTO_NAME(GLOBAL,PCM_READ))) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0) {
+ XBUS_NOTICE(xbus,
+ "%s: Non-PCM packet within a PCM xframe. (%d)\n",
+ __FUNCTION__, rate_limit);
+ dump_xframe("In PCM xframe", xbus, xframe);
+ }
+ goto out;
+ }
+ p += len;
+ if(p > xframe_end || len < RPACKET_HEADERSIZE) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0) {
+ XBUS_NOTICE(xbus,
+ "%s: Invalid packet length %d. (%d)\n",
+ __FUNCTION__, len, rate_limit);
+ dump_xframe("BAD LENGTH", xbus, xframe);
+ }
+ goto out;
+ }
+ xpd = xpd_byaddr(xbus, XPACKET_ADDR(pack).unit, XPACKET_ADDR(pack).subunit);
+ if(unlikely(!xpd)) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0) {
+ notify_bad_xpd(__FUNCTION__, xbus, XPACKET_ADDR(pack), "RECEIVE PCM");
+ dump_xframe("Unknown XPD addr", xbus, xframe);
+ }
+ goto out;
+ }
+ if(!pcm_valid(xpd, pack))
+ goto out;
+ if(SPAN_REGISTERED(xpd)) {
+ XBUS_COUNTER(xbus, RX_PACK_PCM)++;
+ CALL_XMETHOD(card_pcm_tospan, xbus, xpd, pack);
+ }
+ } while(p < xframe_end);
+ ret = 0; /* all good */
+ XBUS_COUNTER(xbus, RX_XFRAME_PCM)++;
+out:
+ FREE_RECV_XFRAME(xbus, xframe);
+ return ret;
+}
+
+static void xbus_tick(xbus_t *xbus)
+{
+ int i;
+ xpd_t *xpd;
+ xframe_t *xframe = NULL;
+ xpacket_t *pack = NULL;
+ size_t pcm_len;
+ bool sent_sync_bit = 0;
+
+ /*
+ * Update zaptel
+ */
+ for(i = 0; i < MAX_XPDS; i++) {
+ xpd = xpd_of(xbus, i);
+ if(xpd && SPAN_REGISTERED(xpd)) {
+ /*
+ * calls to zt_transmit should be out of spinlocks, as it may call back
+ * our hook setting methods.
+ */
+#ifdef OPTIMIZE_CHANMUTE
+ int j;
+
+ for_each_line(xpd, j)
+ xpd->chans[j].chanmute = !IS_SET(xpd->wanted_pcm_mask, j) && !IS_SET(xpd->digital_signalling, j);
+#endif
+ zt_transmit(&xpd->span);
+ }
+ }
+ /*
+ * Fill xframes
+ */
+ for(i = 0; i < MAX_XPDS; i++) {
+ if((xpd = xpd_of(xbus, i)) == NULL)
+ continue;
+ pcm_len = xpd->pcm_len;
+ if(SPAN_REGISTERED(xpd)) {
+ if(pcm_len && xpd->card_present) {
+ do {
+ // pack = NULL; /* FORCE single packet frames */
+ if(xframe && !pack) { /* FULL frame */
+ pcm_frame_out(xbus, xframe);
+ xframe = NULL;
+ XBUS_COUNTER(xbus, TX_PCM_FRAG)++;
+ }
+ if(!xframe) { /* Alloc frame */
+ xframe = ALLOC_SEND_XFRAME(xbus);
+ if (!xframe) {
+ static int rate_limit;
+
+ if((rate_limit++ % 3001) == 0)
+ XBUS_ERR(xbus,
+ "%s: failed to allocate new xframe\n",
+ __FUNCTION__);
+ return;
+ }
+ }
+ pack = xframe_next_packet(xframe, pcm_len);
+ } while(!pack);
+ XPACKET_INIT(pack, GLOBAL, PCM_WRITE, xpd->xbus_idx, 1, 0);
+ XPACKET_LEN(pack) = pcm_len;
+ if(!sent_sync_bit) {
+ XPACKET_ADDR(pack).sync_master = 1;
+ sent_sync_bit = 1;
+ }
+ CALL_XMETHOD(card_pcm_fromspan, xbus, xpd, xpd->wanted_pcm_mask, pack);
+ XBUS_COUNTER(xbus, TX_PACK_PCM)++;
+ }
+ }
+ }
+ if(xframe) /* clean any leftovers */
+ pcm_frame_out(xbus, xframe);
+ /*
+ * Receive PCM
+ */
+ i = atomic_read(&xbus->pcm_rx_counter) & 1;
+ while((xframe = xframe_dequeue(&xbus->pcm_tospan[i])) != NULL) {
+ copy_pcm_tospan(xbus, xframe);
+ if(XPACKET_ADDR((xpacket_t *)xframe->packets).sync_master) {
+ struct timeval now;
+ unsigned long usec;
+
+ do_gettimeofday(&now);
+ usec = usec_diff(&now, &xbus->last_rx_sync);
+ xbus->last_rx_sync = now;
+ /* ignore startup statistics */
+ if(likely(atomic_read(&xbus->pcm_rx_counter) > BIG_TICK_INTERVAL)) {
+ if(abs(usec - 1000) > TICK_TOLERANCE) {
+ static int rate_limit;
+
+ if((rate_limit++ % 5003) == 0)
+ XBUS_DBG(SYNC, xbus, "Bad PCM RX timing(%d): usec=%ld.\n",
+ rate_limit, usec);
+ }
+ if(usec > xbus->max_rx_sync)
+ xbus->max_rx_sync = usec;
+ if(usec < xbus->min_rx_sync)
+ xbus->min_rx_sync = usec;
+ }
+ }
+ }
+ for(i = 0; i < MAX_XPDS; i++) {
+ xpd = xpd_of(xbus, i);
+ if(!xpd || !xpd->card_present)
+ continue;
+ if(SPAN_REGISTERED(xpd)) {
+ do_ec(xpd);
+ zt_receive(&xpd->span);
+ }
+ xpd->timer_count = xbus->global_counter;
+ /*
+ * Must be called *after* tx/rx so
+ * D-Chan counters may be cleared
+ */
+ CALL_XMETHOD(card_tick, xbus, xpd);
+ }
+}
+
+void do_tick(xbus_t *xbus, struct timeval tv_received)
+{
+ int counter = atomic_read(&xpp_tick_counter);
+
+ xbus_command_queue_tick(xbus);
+ xpp_timing_tick(&xbus->timing, &tv_received);
+ if(syncer == xbus) {
+ xpp_timing_tick(&ref_sync, &tv_received);
+ if((counter % BIG_TICK_INTERVAL) == 0)
+ reset_sync_counters();
+ }
+ if((atomic_read(&xbus->pcm_rx_counter) % BIG_TICK_INTERVAL) == 0) {
+ if(xbus->sync_mode == SYNC_MODE_PLL)
+ sync_rate_adjust(xbus);
+ }
+ if(likely(xbus->self_ticking))
+ xbus_tick(xbus);
+ xbus->global_counter = counter;
+}
+
+void xframe_receive_pcm(xbus_t *xbus, xframe_t *xframe)
+{
+ int which = atomic_read(&xbus->pcm_rx_counter) & 1;
+
+ if(!xframe_enqueue(&xbus->pcm_tospan[which], xframe)) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0)
+ XBUS_DBG(SYNC, xbus,
+ "Failed to enqueue received pcm frame. (%d)\n",
+ rate_limit);
+ FREE_RECV_XFRAME(xbus, xframe);
+ }
+ /*
+ * The sync_master bit is marked at the first packet
+ * of the frame, regardless of the XPD that is sync master.
+ * FIXME: what about PRI split?
+ */
+ if(XPACKET_ADDR((xpacket_t *)xframe->packets).sync_master) {
+ do_tick(xbus, xframe->tv_received);
+ atomic_inc(&xbus->pcm_rx_counter);
+ } else
+ xbus->xbus_frag_count++;
+}
+
+#ifdef CONFIG_PROC_FS
+int proc_sync_read(char *page, char **start, off_t off, int count, int *eof, void *data)
+{
+ int len = 0;
+ struct timeval now;
+ unsigned int counter = atomic_read(&xpp_tick_counter);
+ unsigned long usec;
+
+ do_gettimeofday(&now);
+ len += sprintf(page + len, "# To modify sync source write into this file:\n");
+ len += sprintf(page + len, "# ZAPTEL - Another zaptel device provide sync\n");
+ len += sprintf(page + len, "# SYNC=nn - XBUS-nn provide sync\n");
+ len += sprintf(page + len, "# QUERY=nn - Query XBUS-nn for sync information (DEBUG)\n");
+ if(!syncer) {
+ if(zaptel_syncer)
+ len += sprintf(page + len, "ZAPTEL\n");
+ else
+ len += sprintf(page + len, "NO-SYNC\n");
+ } else
+ len += sprintf(page + len, "SYNC=%02d\n", syncer->num);
+#ifdef ZAPTEL_SYNC_TICK
+ if(zaptel_syncer) {
+ len += sprintf(page + len,
+ "Zaptel Reference Sync (%d registered spans):\n",
+ total_registered_spans());
+ len += sprintf(page + len, "\tzaptel_tick: #%d\n", zaptel_tick_count);
+ len += sprintf(page + len, "\ttick - zaptel_tick = %d\n",
+ counter - zaptel_tick_count);
+ } else {
+ len += sprintf(page + len,
+ "Zaptel Reference Sync Not activated\n");
+ }
+#endif
+ usec = usec_diff(&now, &ref_sync.timing_val);
+ len += sprintf(page + len, "\ntick: #%d\n", counter);
+ len += sprintf(page + len,
+ "tick rate: %4d/second (measured %ld.%ld msec ago)\n",
+ ref_sync.tick_rate,
+ usec / 1000, usec % 1000);
+ if(pcm_tasklet)
+ len += sprintf(page + len, PCM_TASKLET_DEPRECATION);
+ if (len <= off+count)
+ *eof = 1;
+ *start = page + off;
+ len -= off;
+ if (len > count)
+ len = count;
+ if (len < 0)
+ len = 0;
+ return len;
+}
+
+static int proc_sync_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
+{
+ char buf[MAX_PROC_WRITE];
+ int xbus_num;
+ int xpd_num;
+ xbus_t *xbus;
+ xpd_t *xpd;
+
+ // DBG(SYNC, "%s: count=%ld\n", __FUNCTION__, count);
+ if(count >= MAX_PROC_WRITE)
+ return -EINVAL;
+ if(copy_from_user(buf, buffer, count))
+ return -EFAULT;
+ buf[count] = '\0';
+ if(strncmp("ZAPTEL", buf, 6) == 0) {
+ DBG(SYNC, "ZAPTEL\n");
+ zaptel_syncer=1;
+ update_sync_master(NULL);
+ } else if(sscanf(buf, "SYNC=%d", &xbus_num) == 1) {
+ DBG(SYNC, "SYNC=%d\n", xbus_num);
+ if((xbus = get_xbus(xbus_num)) == NULL) {
+ ERR("No bus %d exists\n", xbus_num);
+ return -ENXIO;
+ }
+ if((xpd = xpd_of(xbus, 0)) == NULL) {
+ XBUS_ERR(xbus, "No xpd 0 exists\n");
+ put_xbus(xbus);
+ return -ENXIO;
+ }
+ update_sync_master(xbus);
+ put_xbus(xbus);
+ } else if(sscanf(buf, "QUERY=%d", &xbus_num) == 1) {
+ DBG(SYNC, "QUERY=%d\n", xbus_num);
+ if((xbus = get_xbus(xbus_num)) == NULL) {
+ ERR("No bus %d exists\n", xbus_num);
+ return -ENXIO;
+ }
+ CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_QUERY, 0);
+ put_xbus(xbus);
+ } else if(sscanf(buf, "%d %d", &xbus_num, &xpd_num) == 2) {
+ NOTICE("Using deprecated syntax to update %s file\n",
+ PROC_SYNC);
+ if(xpd_num != 0) {
+ ERR("Currently can only set sync for XPD #0\n");
+ return -EINVAL;
+ }
+ if((xbus = get_xbus(xbus_num)) == NULL) {
+ ERR("No bus %d exists\n", xbus_num);
+ return -ENXIO;
+ }
+ if((xpd = xpd_of(xbus, xpd_num)) == NULL) {
+ XBUS_ERR(xbus, "No xpd %d exists\n", xpd_num);
+ put_xbus(xbus);
+ return -ENXIO;
+ }
+ update_sync_master(xbus);
+ put_xbus(xbus);
+ } else {
+ ERR("%s: cannot parse '%s'\n", __FUNCTION__, buf);
+ count = -EINVAL;
+ }
+ return count;
+}
+
+static struct proc_dir_entry *top;
+
+#endif
+
+int xbus_pcm_init(struct proc_dir_entry *toplevel)
+{
+ int ret = 0;
+#ifdef CONFIG_PROC_FS
+ struct proc_dir_entry *ent;
+#endif
+
+#ifdef WITH_ECHO_SUPPRESSION
+ INFO("FEATURE: with ECHO_SUPPRESSION\n");
+#else
+ INFO("FEATURE: without ECHO_SUPPRESSION\n");
+#endif
+ if(xpp_ec)
+ INFO("FEATURE: with XPP_EC_CHUNK\n");
+ else
+ INFO("FEATURE: without XPP_EC_CHUNK\n");
+#ifdef ZAPTEL_SYNC_TICK
+ INFO("FEATURE: with sync_tick() from ZAPTEL\n");
+#else
+ INFO("FEATURE: without sync_tick() from ZAPTEL\n");
+#endif
+#ifdef CONFIG_PROC_FS
+ top = toplevel;
+ ent = create_proc_entry(PROC_SYNC, 0644, top);
+ if(!ent) {
+ ret = -EFAULT;
+ goto err;
+ }
+ ent->read_proc = proc_sync_read;
+ ent->write_proc = proc_sync_write;
+ ent->data = NULL;
+#endif
+ if(pcm_tasklet)
+ ERR(PCM_TASKLET_DEPRECATION);
+ xpp_timing_init(&ref_sync, "REF-SYNC");
+err:
+ return ret;
+}
+
+void xbus_pcm_shutdown(void)
+{
+#ifdef CONFIG_PROC_FS
+ DBG(GENERAL, "Removing '%s' from proc\n", PROC_SYNC);
+ remove_proc_entry(PROC_SYNC, top);
+#endif
+}
+
+
+EXPORT_SYMBOL(xbus_request_sync);
+EXPORT_SYMBOL(got_new_syncer);
+EXPORT_SYMBOL(elect_syncer);
+EXPORT_SYMBOL(xpp_echocan);
+#ifdef ZAPTEL_SYNC_TICK
+EXPORT_SYMBOL(zaptel_sync_tick);
+#endif
+EXPORT_SYMBOL(__pcm_recompute);
+EXPORT_SYMBOL(pcm_recompute);
+EXPORT_SYMBOL(generic_card_pcm_tospan);
+EXPORT_SYMBOL(generic_card_pcm_fromspan);
+
diff --git a/xpp/xbus-pcm.h b/xpp/xbus-pcm.h
new file mode 100644
index 0000000..79d0078
--- /dev/null
+++ b/xpp/xbus-pcm.h
@@ -0,0 +1,106 @@
+/*
+ * Written by Oron Peled <oron@actcom.co.il>
+ * Copyright (C) 2004-2007, Xorcom
+ *
+ * All rights reserved.
+ *
+ * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+/*
+ * This source module contains all the PCM and SYNC handling code.
+ */
+#ifndef XBUS_PCM_H
+#define XBUS_PCM_H
+
+#include "xdefs.h"
+#include <linux/proc_fs.h>
+#include <zaptel.h>
+
+#ifdef __KERNEL__
+
+enum sync_mode {
+ SYNC_MODE_NONE = 0x00,
+ SYNC_MODE_AB = 0x01, /* Astribank sync */
+ SYNC_MODE_PLL = 0x03, /* Adjust XPD's PLL according to HOST */
+ SYNC_MODE_QUERY = 0x80,
+};
+
+/*
+ * A generic timing source. Encapsulates all sampling
+ * logic, average and standard deviation computation,
+ * tick_rate computation.
+ *
+ * Each xbus has embedded instance.
+ * Also there is a global instance for external reference
+ * syncing (e.g: from zaptel)
+ */
+struct xpp_timing {
+ const char *name;
+ struct timeval timing_val;
+ unsigned long timing_count;
+ long accumulated_usec;
+ long accumulated_usec_sqr;
+ int tick_avg;
+ int tick_stddev;
+ spinlock_t lock;
+ unsigned int tick_rate;
+};
+
+void xpp_timing_init(struct xpp_timing *timing, const char *name);
+
+static inline long usec_diff(const struct timeval *tv1, const struct timeval *tv2)
+{
+ long diff_sec;
+ long diff_usec;
+
+ diff_sec = tv1->tv_sec - tv2->tv_sec;
+ diff_usec = tv1->tv_usec - tv2->tv_usec;
+ return diff_sec * 1000000 + diff_usec;
+}
+
+
+int xbus_pcm_init(struct proc_dir_entry *top);
+void xbus_pcm_shutdown(void);
+int send_pcm_frame(xbus_t *xbus, xframe_t *xframe);
+void pcm_recompute(xpd_t *xpd, xpp_line_t tmp_pcm_mask);
+void __pcm_recompute(xpd_t *xpd, xpp_line_t tmp_pcm_mask); /* non locking */
+void xframe_receive_pcm(xbus_t *xbus, xframe_t *xframe);
+void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xpacket_t *pack);
+void generic_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack);
+void fill_beep(u_char *buf, int num, int duration);
+const char *sync_mode_name(enum sync_mode mode);
+void xbus_set_command_timer(xbus_t *xbus, bool on);
+void xbus_request_sync(xbus_t *xbus, enum sync_mode mode);
+void got_new_syncer(xbus_t *xbus, enum sync_mode mode, int drift);
+int xbus_command_queue_tick(xbus_t *xbus);
+void xbus_reset_counters(xbus_t *xbus);
+void elect_syncer(const char *msg);
+int xpp_echocan(struct zt_chan *chan, int len);
+#ifdef ZAPTEL_SYNC_TICK
+int zaptel_sync_tick(struct zt_span *span, int is_master);
+#endif
+
+#ifdef XPP_EC_CHUNK
+extern int xpp_ec;
+#else
+#define xpp_ec 0
+#endif
+
+#endif /* __KERNEL__ */
+
+#endif /* XBUS_PCM_H */
+
diff --git a/xpp/xbus-sysfs.c b/xpp/xbus-sysfs.c
index f136c2c..d45058e 100644
--- a/xpp/xbus-sysfs.c
+++ b/xpp/xbus-sysfs.c
@@ -195,13 +195,13 @@ static DEVICE_ATTR_FUNC(connector_show, dev, buf)
return ret;
}
-static DEVICE_ATTR_FUNC(serialnum_show, dev, buf)
+static DEVICE_ATTR_FUNC(label_show, dev, buf)
{
xbus_t *xbus;
int ret;
xbus = dev_to_xbus(dev);
- ret = snprintf(buf, PAGE_SIZE, "%s\n", xbus->serialnum);
+ ret = snprintf(buf, PAGE_SIZE, "%s\n", xbus->label);
return ret;
}
@@ -211,12 +211,12 @@ static DEVICE_ATTR_FUNC(status_show, dev, buf)
int ret;
xbus = dev_to_xbus(dev);
- ret = snprintf(buf, PAGE_SIZE, "%s\n", (xbus->hardware_exists)?"connected":"missing");
+ ret = snprintf(buf, PAGE_SIZE, "%s\n", (TRANSPORT_RUNNING(xbus))?"connected":"missing");
return ret;
}
static DEVICE_ATTR(connector, S_IRUGO, connector_show, NULL);
-static DEVICE_ATTR(serialnum, S_IRUGO, serialnum_show, NULL);
+static DEVICE_ATTR(label, S_IRUGO, label_show, NULL);
static DEVICE_ATTR(status, S_IRUGO, status_show, NULL);
void xbus_sysfs_remove(xbus_t *xbus)
@@ -228,7 +228,7 @@ void xbus_sysfs_remove(xbus_t *xbus)
astribank = &xbus->astribank;
BUG_ON(!astribank);
device_remove_file(&xbus->astribank, &dev_attr_status);
- device_remove_file(&xbus->astribank, &dev_attr_serialnum);
+ device_remove_file(&xbus->astribank, &dev_attr_label);
device_remove_file(&xbus->astribank, &dev_attr_connector);
device_unregister(&xbus->astribank);
}
@@ -258,7 +258,7 @@ int xbus_sysfs_create(xbus_t *xbus)
XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
goto out;
}
- ret = device_create_file(astribank, &dev_attr_serialnum);
+ ret = device_create_file(astribank, &dev_attr_label);
if(ret) {
XBUS_ERR(xbus, "%s: device_create_file failed: %d\n", __FUNCTION__, ret);
goto out;
diff --git a/xpp/xdefs.h b/xpp/xdefs.h
index 078e5a3..1da9580 100644
--- a/xpp/xdefs.h
+++ b/xpp/xdefs.h
@@ -70,7 +70,7 @@ struct list_head { struct list_head *next; struct list_head *prev; };
#define XPD_DESCLEN 20
#define XBUS_NAMELEN 20 /* must be <= from maximal workqueue name */
#define XBUS_DESCLEN 40
-#define SERIALNUM_SIZE 20
+#define LABEL_SIZE 20
#define UNIT_BITS 3 /* Bit for Astribank unit number */
#define SUBUNIT_BITS 3 /* Bit for Astribank subunit number */
@@ -102,6 +102,13 @@ struct list_head { struct list_head *next; struct list_head *prev; };
typedef char *charp;
typedef unsigned char byte;
#ifdef __KERNEL__
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
+#define KMEM_CACHE_T kmem_cache_t
+#else
+#define KMEM_CACHE_T struct kmem_cache
+#endif
+
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
typedef int bool;
#endif
@@ -116,5 +123,4 @@ typedef struct xops xops_t;
typedef __u32 xpp_line_t; /* at most 31 lines for E1 */
typedef byte lineno_t;
-
#endif /* XDEFS_H */
diff --git a/xpp/xframe_queue.c b/xpp/xframe_queue.c
new file mode 100644
index 0000000..abf9ee0
--- /dev/null
+++ b/xpp/xframe_queue.c
@@ -0,0 +1,250 @@
+#include "xframe_queue.h"
+#include "xbus-core.h"
+#include "zap_debug.h"
+
+static xframe_t *transport_alloc_xframe(xbus_t *xbus, gfp_t gfp_flags);
+static void transport_free_xframe(xbus_t *xbus, xframe_t *xframe);
+
+void xframe_queue_init(struct xframe_queue *q, unsigned int steady_state_count, unsigned int max_count, const char *name, void *priv)
+{
+ memset(q, 0, sizeof(*q));
+ spin_lock_init(&q->lock);
+ INIT_LIST_HEAD(&q->head);
+ q->max_count = XFRAME_QUEUE_MARGIN + max_count;
+ q->steady_state_count = XFRAME_QUEUE_MARGIN + steady_state_count;
+ q->name = name;
+ q->priv = priv;
+}
+
+void xframe_queue_clearstats(struct xframe_queue *q)
+{
+ q->worst_count = 0;
+ //q->overflows = 0; /* Never clear overflows */
+ q->worst_lag_usec = 0L;
+}
+
+static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
+{
+ int ret = 1;
+
+ if(q->count >= q->max_count) {
+ q->overflows++;
+ ret = 0;
+ goto out;
+ }
+ if(++q->count > q->worst_count)
+ q->worst_count = q->count;
+ list_add_tail(&xframe->frame_list, &q->head);
+ do_gettimeofday(&xframe->tv_queued);
+out:
+ return ret;
+}
+
+bool xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
+{
+ unsigned long flags;
+ int ret;
+
+ spin_lock_irqsave(&q->lock, flags);
+ ret = __xframe_enqueue(q, xframe);
+ spin_unlock_irqrestore(&q->lock, flags);
+ return ret;
+}
+
+xframe_t *__xframe_dequeue(struct xframe_queue *q)
+{
+ xframe_t *frm = NULL;
+ struct list_head *h;
+ struct timeval now;
+ unsigned long usec_lag;
+
+ if(list_empty(&q->head))
+ goto out;
+ h = q->head.next;
+ list_del_init(h);
+ --q->count;
+ frm = list_entry(h, xframe_t, frame_list);
+ do_gettimeofday(&now);
+ usec_lag =
+ (now.tv_sec - frm->tv_queued.tv_sec)*1000*1000 +
+ (now.tv_usec - frm->tv_queued.tv_usec);
+ if(q->worst_lag_usec < usec_lag)
+ q->worst_lag_usec = usec_lag;
+out:
+ return frm;
+}
+
+xframe_t *xframe_dequeue(struct xframe_queue *q)
+{
+ unsigned long flags;
+ xframe_t *frm;
+
+ spin_lock_irqsave(&q->lock, flags);
+ frm = __xframe_dequeue(q);
+ spin_unlock_irqrestore(&q->lock, flags);
+ return frm;
+}
+void xframe_queue_disable(struct xframe_queue *q)
+{
+ q->max_count = 0;
+}
+
+void xframe_queue_clear(struct xframe_queue *q)
+{
+ xframe_t *xframe;
+ xbus_t *xbus = q->priv;
+ int i = 0;
+
+ xframe_queue_disable(q);
+ while((xframe = xframe_dequeue(q)) != NULL) {
+ transport_free_xframe(xbus, xframe);
+ i++;
+ }
+ XBUS_INFO(xbus, "%s: finished queue clear (%d items)\n", q->name, i);
+}
+
+uint xframe_queue_count(struct xframe_queue *q)
+{
+ return q->count;
+}
+
+/*------------------------- Frame Alloc/Dealloc --------------------*/
+
+static xframe_t *transport_alloc_xframe(xbus_t *xbus, gfp_t gfp_flags)
+{
+ struct xbus_ops *ops;
+ xframe_t *xframe;
+ unsigned long flags;
+
+ BUG_ON(!xbus);
+ ops = transportops_get(xbus);
+ if(unlikely(!ops)) {
+ XBUS_ERR(xbus, "Missing transport\n");
+ return NULL;
+ }
+ spin_lock_irqsave(&xbus->transport.lock, flags);
+ //XBUS_INFO(xbus, "%s (transport_refcount=%d)\n", __FUNCTION__, atomic_read(&xbus->transport.transport_refcount));
+ xframe = ops->alloc_xframe(xbus, gfp_flags);
+ if(!xframe) {
+ static int rate_limit;
+
+ if((rate_limit++ % 3001) == 0)
+ XBUS_ERR(xbus,
+ "Failed xframe allocation from transport (%d)\n",
+ rate_limit);
+ transportops_put(xbus);
+ /* fall through */
+ }
+ spin_unlock_irqrestore(&xbus->transport.lock, flags);
+ return xframe;
+}
+
+static void transport_free_xframe(xbus_t *xbus, xframe_t *xframe)
+{
+ struct xbus_ops *ops;
+ unsigned long flags;
+
+ BUG_ON(!xbus);
+ ops = xbus->transport.ops;
+ BUG_ON(!ops);
+ spin_lock_irqsave(&xbus->transport.lock, flags);
+ //XBUS_INFO(xbus, "%s (transport_refcount=%d)\n", __FUNCTION__, atomic_read(&xbus->transport.transport_refcount));
+ ops->free_xframe(xbus, xframe);
+ transportops_put(xbus);
+ spin_unlock_irqrestore(&xbus->transport.lock, flags);
+}
+
+static bool xframe_queue_adjust(struct xframe_queue *q)
+{
+ xbus_t *xbus;
+ xframe_t *xframe;
+ int delta;
+ unsigned long flags;
+ int ret = 0;
+
+ BUG_ON(!q);
+ xbus = q->priv;
+ BUG_ON(!xbus);
+ spin_lock_irqsave(&q->lock, flags);
+ delta = q->count - q->steady_state_count;
+ if(delta < -XFRAME_QUEUE_MARGIN) {
+ /* Increase pool by one frame */
+ //XBUS_INFO(xbus, "%s(%d): Allocate one\n", q->name, delta);
+ xframe = transport_alloc_xframe(xbus, GFP_ATOMIC);
+ if(!xframe) {
+ XBUS_ERR(xbus, "%s: failed frame allocation\n", q->name);
+ goto out;
+ }
+ if(!__xframe_enqueue(q, xframe)) {
+ XBUS_ERR(xbus, "%s: failed enqueueing frame\n", q->name);
+ transport_free_xframe(xbus, xframe);
+ goto out;
+ }
+ } else if(delta > XFRAME_QUEUE_MARGIN) {
+ /* Decrease pool by one frame */
+ //XBUS_INFO(xbus, "%s(%d): Free one\n", q->name, delta);
+ xframe = __xframe_dequeue(q);
+ if(!xframe) {
+ XBUS_ERR(xbus, "%s: failed dequeueing frame\n", q->name);
+ goto out;
+ }
+ transport_free_xframe(xbus, xframe);
+ }
+ ret = 1;
+out:
+ spin_unlock_irqrestore(&q->lock, flags);
+ return ret;
+}
+
+xframe_t *get_xframe(struct xframe_queue *q)
+{
+ xframe_t *xframe;
+ xbus_t *xbus;
+
+ BUG_ON(!q);
+ xbus = (xbus_t *)q->priv;
+ BUG_ON(!xbus);
+ xframe_queue_adjust(q);
+ xframe = xframe_dequeue(q);
+ if(!xframe) {
+ static int rate_limit;
+
+ if((rate_limit++ % 3001) == 0)
+ XBUS_ERR(xbus, "%s STILL EMPTY (%d)\n", q->name, rate_limit);
+ return NULL;
+ }
+ BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
+ atomic_set(&xframe->frame_len, 0);
+ do_gettimeofday(&xframe->tv_created);
+ memset(xframe->packets, 0, xframe->frame_maxlen);
+ //XBUS_INFO(xbus, "%s\n", __FUNCTION__);
+ return xframe;
+}
+
+void put_xframe(struct xframe_queue *q, xframe_t *xframe)
+{
+ xbus_t *xbus;
+
+ BUG_ON(!q);
+ xbus = (xbus_t *)q->priv;
+ BUG_ON(!xbus);
+ //XBUS_INFO(xbus, "%s\n", __FUNCTION__);
+ BUG_ON(!TRANSPORT_EXIST(xbus));
+ if(unlikely(!xframe_enqueue(q, xframe))) {
+ XBUS_ERR(xbus, "Failed returning xframe to %s\n", q->name);
+ transport_free_xframe(xbus, xframe);
+ return;
+ }
+ xframe_queue_adjust(q);
+}
+
+
+EXPORT_SYMBOL(xframe_queue_init);
+EXPORT_SYMBOL(xframe_queue_clearstats);
+EXPORT_SYMBOL(xframe_enqueue);
+EXPORT_SYMBOL(xframe_dequeue);
+EXPORT_SYMBOL(xframe_queue_disable);
+EXPORT_SYMBOL(xframe_queue_clear);
+EXPORT_SYMBOL(xframe_queue_count);
+EXPORT_SYMBOL(get_xframe);
+EXPORT_SYMBOL(put_xframe);
diff --git a/xpp/xframe_queue.h b/xpp/xframe_queue.h
new file mode 100644
index 0000000..5612d65
--- /dev/null
+++ b/xpp/xframe_queue.h
@@ -0,0 +1,34 @@
+#ifndef XFRAME_QUEUE_H
+#define XFRAME_QUEUE_H
+
+#include <linux/list.h>
+#include <linux/spinlock.h>
+#include "xdefs.h"
+
+#define XFRAME_QUEUE_MARGIN 10
+
+struct xframe_queue {
+ struct list_head head;
+ unsigned int count;
+ unsigned int max_count;
+ unsigned int steady_state_count;
+ spinlock_t lock;
+ const char *name;
+ void *priv;
+ /* statistics */
+ unsigned int worst_count;
+ unsigned int overflows;
+ unsigned long worst_lag_usec; /* since xframe creation */
+};
+
+void xframe_queue_init(struct xframe_queue *q,
+ unsigned int steady_state_count, unsigned int max_count,
+ const char *name, void *priv);
+__must_check bool xframe_enqueue(struct xframe_queue *q, xframe_t *xframe);
+__must_check xframe_t *xframe_dequeue(struct xframe_queue *q);
+void xframe_queue_clearstats(struct xframe_queue *q);
+void xframe_queue_disable(struct xframe_queue *q);
+void xframe_queue_clear(struct xframe_queue *q);
+uint xframe_queue_count(struct xframe_queue *q);
+
+#endif /* XFRAME_QUEUE_ */
diff --git a/xpp/xpd.h b/xpp/xpd.h
index 3949adb..7c174f2 100644
--- a/xpp/xpd.h
+++ b/xpp/xpd.h
@@ -86,62 +86,6 @@ typedef unsigned gfp_t; /* Added in 2.6.14 */
#endif
#endif // __KERNEL__
-
-typedef struct xbus_ops xbus_ops_t;
-
-typedef enum xbus_type {
- FIRMWARE_LOOPBACK = 1,
- FIRMWARE_XPP = 2,
-} xbus_type_t;
-
-#ifdef __KERNEL__
-
-struct xbus_ops {
- int (*xframe_send)(xbus_t *xbus, xframe_t *xframe);
- xframe_t *(*xframe_new)(xbus_t *xbus, gfp_t flags);
- void (*xframe_free)(xbus_t *xbus, xframe_t *p);
-};
-
-/*
- * XBUS statistics counters
- */
-enum {
- XBUS_N_DESC_REQ,
- XBUS_N_DEV_DESC_FULL,
- XBUS_N_DEV_DESC_EMPTY,
- XBUS_N_TX_XFRAME_PCM,
- XBUS_N_RX_XFRAME_PCM,
- XBUS_N_TX_PACK_PCM,
- XBUS_N_RX_PACK_PCM,
- XBUS_N_TX_BYTES,
- XBUS_N_RX_BYTES,
- XBUS_N_TX_PCM_FRAG,
-};
-
-#define XBUS_COUNTER(xbus, counter) ((xbus)->counters[XBUS_N_ ## counter])
-
-#define C_(x) [ XBUS_N_ ## x ] = { #x }
-
-/* yucky, make an instance so we can size it... */
-static struct xbus_counters {
- char *name;
-} xbus_counters[] = {
- C_(DESC_REQ),
- C_(DEV_DESC_FULL),
- C_(DEV_DESC_EMPTY),
- C_(TX_XFRAME_PCM),
- C_(RX_XFRAME_PCM),
- C_(TX_PACK_PCM),
- C_(RX_PACK_PCM),
- C_(TX_BYTES),
- C_(RX_BYTES),
- C_(TX_PCM_FRAG),
-};
-
-#undef C_
-
-#define XBUS_COUNTER_MAX ARRAY_SIZE(xbus_counters)
-
#define CARD_DESC_MAGIC 0xca9dde5c
struct card_desc_struct {
@@ -155,103 +99,6 @@ struct card_desc_struct {
xpp_line_t line_status; /* Initial line status (offhook) */
};
-#ifdef XPP_DEBUGFS
-/* definition in xbus-core.c */
-struct debugfs_data;
-#endif
-
-/*
- * Encapsulate all poll related data of a single xbus.
- */
-struct xbus_poller {
- /*
- * Bus scanning
- */
- xbus_t *xbus;
- struct workqueue_struct *wq;
- bool is_polling;
- atomic_t count_poll_answers;
- struct list_head poll_results;
- wait_queue_head_t wait_for_polls;
-
- struct work_struct xpds_init_work;
-
- atomic_t count_xpds_to_initialize;
- atomic_t count_xpds_initialized;
- wait_queue_head_t wait_for_xpd_initialization;
-};
-
-/*
- * An xbus is a transport layer for Xorcom Protocol commands
- */
-struct xbus {
- char busname[XBUS_NAMELEN]; /* set by xbus_new() */
-
- /* low-level bus drivers set these 2 fields */
- char busdesc[XBUS_DESCLEN];
- char serialnum[SERIALNUM_SIZE];
-
- int num;
- xbus_ops_t *ops;
- struct xpd *xpds[MAX_XPDS];
- int max_xframe_size;
-
- /* Device-Model */
- struct device astribank;
-#define dev_to_xbus(dev) container_of(dev, struct xbus, astribank)
-
- /* Simulator data */
- xbus_type_t bus_type;
-
- spinlock_t lock;
- atomic_t pcm_nesting;
-
- bool hardware_exists; /* Hardware is functional */
- int open_counter; /* Number of open channels */
- atomic_t packet_counter; /* Allocated packets */
- wait_queue_head_t packet_cache_empty;
-
- /* PCM metrics */
- struct timeval last_tx_sync;
- struct timeval last_rx_sync;
- unsigned long max_tx_sync;
- unsigned long min_tx_sync;
- unsigned long max_rx_sync;
- unsigned long min_rx_sync;
- unsigned long max_rx_process; /* packet processing time (usec) */
-
- struct xbus_poller *poller;
-
- /*
- * Sync adjustment
- */
- int sync_adjustment;
- int sync_adjustment_offset;
- long pll_updated_at;
-
- struct rw_semaphore in_use;
- int num_xpds;
- void *priv; /* Pointer to transport level data structures */
-
-#ifdef XPP_DEBUGFS
- struct dentry *debugfs_dir;
- struct dentry *debugfs_file;
- struct debugfs_data *debugfs_data;
-#endif
-#ifdef CONFIG_PROC_FS
- struct proc_dir_entry *proc_xbus_dir;
- struct proc_dir_entry *proc_xbus_summary;
- struct proc_dir_entry *proc_xbus_waitfor_xpds;
-#ifdef PROTOCOL_DEBUG
- struct proc_dir_entry *proc_xbus_command;
-#endif
-#endif
-
- /* statistics */
- int counters[XBUS_COUNTER_MAX];
-};
-#endif
-
typedef enum xpd_direction {
TO_PSTN = 0,
TO_PHONE = 1,
@@ -345,7 +192,6 @@ struct xpd {
struct xpd_addr addr;
struct list_head xpd_list;
unsigned int timer_count;
- volatile u_char *readchunk; /* Double-word aligned read memory */
/* Echo cancelation */
u_char ec_chunk1[CHANNELS_PERXPD][ZT_CHUNKSIZE];
u_char ec_chunk2[CHANNELS_PERXPD][ZT_CHUNKSIZE];
diff --git a/xpp/xpp_usb.c b/xpp/xpp_usb.c
index 5d34554..73f351c 100644
--- a/xpp/xpp_usb.c
+++ b/xpp/xpp_usb.c
@@ -20,34 +20,6 @@
*
*/
#include <linux/version.h>
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-# warning "This module is tested only with 2.6 kernels"
-#endif
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
-# undef USB_FIELDS_MISSING
-#else
-# define USB_FIELDS_MISSING
-
-# define USB_MAX_STRING 128
-# define USB_GET_STRING(udev,field,buf) \
- do { \
- if((udev)->descriptor.field) { \
- char tmp[USB_MAX_STRING]; \
- if(usb_string((udev), (udev)->descriptor.field, tmp, sizeof(tmp)) > 0) \
- snprintf((buf), USB_MAX_STRING, "%s", tmp); \
- } \
- } while(0);
-# define USB_GET_IFACE_NAME(udev,iface,buf) \
- do { \
- if((iface)->desc.iInterface) { \
- char tmp[USB_MAX_STRING]; \
- if(usb_string((udev), (iface)->desc.iInterface, tmp, sizeof(tmp)) > 0) \
- snprintf((buf), USB_MAX_STRING, "%s", tmp); \
- } \
- } while(0);
-#endif
-
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/module.h>
@@ -64,6 +36,7 @@
#include "xpd.h"
#include "xproto.h"
#include "xbus-core.h"
+#include "xframe_queue.h"
#ifdef DEBUG
#include "card_fxs.h"
#include "card_fxo.h"
@@ -74,10 +47,22 @@ static const char rcsid[] = "$Id$";
DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements"); /* must be before zap_debug.h */
DEF_PARM(int, usb1, 0, 0644, "Allow using USB 1.1 interfaces");
-DEF_PARM_BOOL(rx_tasklet, 1, 0644, "Use receive tasklets");
+DEF_PARM(uint, tx_sluggish, 2000, 0644, "A sluggish transmit (usec)");
+DEF_PARM(uint, drop_pcm_after, 6, 0644, "Number of consecutive tx_sluggish to drop a PCM frame");
#include "zap_debug.h"
+
+#define XUSB_PRINTK(level, xusb, fmt, ...) \
+ printk(KERN_ ## level "%s-%s: xusb-%d (%s) [%s]: " fmt, #level, \
+ THIS_MODULE->name, (xusb)->index, xusb->path, xusb->serial, ## __VA_ARGS__)
+
+#define XUSB_DBG(bits, xusb, fmt, ...) \
+ ((void)((print_dbg & (DBG_ ## bits)) && XUSB_PRINTK(DEBUG, xusb, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+#define XUSB_ERR(xusb, fmt, ...) XUSB_PRINTK(ERR, xusb, fmt, ## __VA_ARGS__)
+#define XUSB_NOTICE(xusb, fmt, ...) XUSB_PRINTK(NOTICE, xusb, fmt, ## __VA_ARGS__)
+#define XUSB_INFO(xusb, fmt, ...) XUSB_PRINTK(INFO, xusb, fmt, ## __VA_ARGS__)
+
/* FIXME: A flag that was deprecated at some point, and rather useless */
/* anyway. Only used in the code or-ed to other flags */
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,14)
@@ -90,6 +75,33 @@ DEF_PARM_BOOL(rx_tasklet, 1, 0644, "Use receive tasklets");
#define PROC_USBXPP_SUMMARY "xpp_usb"
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
+# warning "This module is tested only with 2.6 kernels"
+#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,12)
+# undef USB_FIELDS_MISSING
+#else
+# define USB_FIELDS_MISSING
+
+# define USB_MAX_STRING 128
+# define USB_GET_STRING(udev,field,buf) \
+ do { \
+ if((udev)->descriptor.field) { \
+ char tmp[USB_MAX_STRING]; \
+ if(usb_string((udev), (udev)->descriptor.field, tmp, sizeof(tmp)) > 0) \
+ snprintf((buf), USB_MAX_STRING, "%s", tmp); \
+ } \
+ } while(0);
+# define USB_GET_IFACE_NAME(udev,iface,buf) \
+ do { \
+ if((iface)->desc.iInterface) { \
+ char tmp[USB_MAX_STRING]; \
+ if(usb_string((udev), (iface)->desc.iInterface, tmp, sizeof(tmp)) > 0) \
+ snprintf((buf), USB_MAX_STRING, "%s", tmp); \
+ } \
+ } while(0);
+#endif
+
#ifdef DEBUG_PCM_TIMING
static cycles_t stamp_last_pcm_read;
static cycles_t accumulate_diff;
@@ -103,12 +115,21 @@ struct xusb_endpoint {
usb_complete_t callback;
};
-static int xusb_xframe_send(xbus_t *xbus, xframe_t *xframe);
+enum xusb_dir {
+ XUSB_RECV = 0,
+ XUSB_SEND = 1,
+};
+
+static int xframe_send_pcm(xbus_t *xbus, xframe_t *xframe);
+static int xframe_send_cmd(xbus_t *xbus, xframe_t *xframe);
+static xframe_t *alloc_xframe(xbus_t *xbus, gfp_t flags);
+static void free_xframe(xbus_t *xbus, xframe_t *frm);
-static xbus_ops_t xusb_ops = {
- .xframe_send = xusb_xframe_send,
- .xframe_new = NULL, // Default allocator
- .xframe_free = NULL, // Default deallocator
+static struct xbus_ops xusb_ops = {
+ .xframe_send_pcm = xframe_send_pcm,
+ .xframe_send_cmd = xframe_send_cmd,
+ .alloc_xframe = alloc_xframe,
+ .free_xframe = free_xframe,
};
enum {
@@ -139,58 +160,63 @@ static struct xusb_counters {
#define MAX_PENDING_WRITES 100
-enum xusb_dir {
- XUSB_RECV = 0,
- XUSB_SEND = 1,
-};
+static KMEM_CACHE_T *xusb_cache = NULL;
-/* Receive Tasklets */
-#define MAX_RECV_QUEUE 100
+typedef struct xusb xusb_t;
-struct xframe_queue {
- struct list_head head;
- unsigned int count;
- unsigned int worst_count;
- unsigned int overflows;
- spinlock_t lock;
+/*
+ * A uframe is our low level representation of a frame.
+ *
+ * It contains the metadata for the usb stack (a urb)
+ * and the metadata for the xbus-core (an xframe)
+ * as well as pointing to the data (transfer_buffer, transfer_buffer_length)
+ * directionality (send/receive) and ownership (xusb).
+ */
+struct uframe {
+ unsigned long uframe_magic;
+#define UFRAME_MAGIC 654321L
+ struct urb urb;
+ xframe_t xframe;
+ size_t transfer_buffer_length;
+ void *transfer_buffer; /* max XFRAME_DATASIZE */
+ xusb_t *xusb;
};
-static void xframe_queue_init(struct xframe_queue *q);
-static int xframe_enqueue(struct xframe_queue *q, xframe_t *xframe);
-static xframe_t *xframe_dequeue(struct xframe_queue *q);
-static void receive_tasklet_func(unsigned long data);
+#define urb_to_uframe(urb) container_of(urb, struct uframe, urb)
+#define xframe_to_uframe(xframe) container_of(xframe, struct uframe, xframe)
+#define xusb_of(xbus) ((xusb_t *)((xbus)->transport.priv))
+
+#define USEC_BUCKET 100 /* usec */
+#define NUM_BUCKETS 15
+#define BUCKET_START (500/USEC_BUCKET) /* skip uninteresting */
/*
* USB XPP Bus (a USB Device)
*/
-typedef struct xpp_usb_bus {
- xbus_t *xbus;
+struct xusb {
+ uint xbus_num;
struct usb_device *udev; /* save off the usb device pointer */
struct usb_interface *interface; /* the interface for this device */
unsigned char minor; /* the starting minor number for this device */
+ uint index;
+ char path[XBUS_DESCLEN]; /* a unique path */
struct xusb_model_info *model_info;
struct xusb_endpoint endpoints[2]; /* RECV/SEND endpoints */
- struct urb *read_urb;
-
- /* Receive tasklet */
- struct xframe_queue receive_queue;
- struct tasklet_struct receive_tasklet;
- int cpu_rcv_intr[NR_CPUS];
- int cpu_rcv_tasklet[NR_CPUS];
-
- struct completion write_finished; /* wait for the write to finish */
-
int present; /* if the device is not disconnected */
- int reading; /* is the read_urb reading (listening) */
atomic_t pending_writes; /* submited but not out yet */
struct semaphore sem; /* locks this structure */
- int counters[XUSB_COUNTER_MAX];
+ int counters[XUSB_COUNTER_MAX];
/* metrics */
struct timeval last_tx;
unsigned int max_tx_delay;
+ uint usb_tx_delay[NUM_BUCKETS];
+ uint sluggish_debounce;
+ bool drop_next_pcm; /* due to sluggishness */
+ atomic_t pcm_tx_drops;
+ atomic_t usb_sluggish_count;
#ifdef USB_FIELDS_MISSING
/* storage for missing strings in old kernels */
@@ -205,7 +231,7 @@ typedef struct xpp_usb_bus {
const char *interface_name;
#endif
-} xusb_t;
+};
static spinlock_t xusb_lock = SPIN_LOCK_UNLOCKED;
static xusb_t *xusb_array[MAX_BUSES] = {};
@@ -216,18 +242,6 @@ static unsigned bus_count = 0;
static DECLARE_MUTEX (disconnect_sem);
/*
- * Function Prototypes
- */
-#if 0
-static ssize_t xusb_read (struct file *file, char *buffer, size_t count, loff_t *ppos);
-static ssize_t xusb_write (struct file *file, const char *buffer, size_t count, loff_t *ppos);
-static int xusb_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg);
-static int xusb_open (struct inode *inode, struct file *file);
-static int xusb_release (struct inode *inode, struct file *file);
-static void xusb_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
-#endif
-
-/*
* AsteriskNow kernel has backported the "lean" callback from 2.6.20
* to 2.6.19 without any macro to notify of this fact -- how lovely.
* Debian-Etch and Centos5 are using 2.6.18 for now (lucky for us).
@@ -239,37 +253,112 @@ static void xusb_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
#define USB_PASS_CB(u) struct urb *u
#endif
-static void xpp_urb_delete(struct urb *urb);
-static struct urb *xpp_urb_new(xusb_t *dev, enum xusb_dir dir, size_t size);
static void xpp_send_callback(USB_PASS_CB(urb));
static void xpp_receive_callback(USB_PASS_CB(urb));
-
static int xusb_probe (struct usb_interface *interface, const struct usb_device_id *id);
static void xusb_disconnect (struct usb_interface *interface);
static int xusb_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data);
/*------------------------------------------------------------------*/
-static int xusb_xframe_send(xbus_t *xbus, xframe_t *xframe)
+/*
+ * Updates the urb+xframe metadata from the uframe information.
+ */
+static void uframe_recompute(struct uframe *uframe, enum xusb_dir dir)
+{
+ struct urb *urb = &uframe->urb;
+ xusb_t *xusb = uframe->xusb;
+ struct usb_device *udev = xusb->udev;
+ struct xusb_endpoint *xusb_ep = &xusb->endpoints[dir];
+ unsigned int ep_addr = xusb_ep->ep_addr;
+ usb_complete_t urb_cb = xusb_ep->callback;
+ unsigned int epnum = ep_addr & USB_ENDPOINT_NUMBER_MASK;
+ int pipe = usb_pipein(ep_addr)
+ ? usb_rcvbulkpipe(udev, epnum)
+ : usb_sndbulkpipe(udev, epnum);
+
+ BUG_ON(uframe->uframe_magic != UFRAME_MAGIC);
+ usb_fill_bulk_urb(urb, udev, pipe, uframe->transfer_buffer, uframe->transfer_buffer_length, urb_cb, uframe);
+ urb->transfer_flags = (URB_NO_TRANSFER_DMA_MAP | URB_ASYNC_UNLINK);
+}
+
+static xframe_t *alloc_xframe(xbus_t *xbus, gfp_t gfp_flags)
+{
+ struct uframe *uframe;
+ xusb_t *xusb;
+ void *p;
+ int size;
+ static int rate_limit;
+
+ BUG_ON(!xbus);
+ xusb = xusb_of(xbus);
+ BUG_ON(!xusb);
+ if(!xusb->present) {
+ if((rate_limit++ % 1003) == 0)
+ XUSB_ERR(xusb,
+ "abort allocations during device disconnect (%d)\n", rate_limit);
+ return NULL;
+ }
+ size = min(xusb->endpoints[XUSB_SEND].max_size, xusb->endpoints[XUSB_RECV].max_size);
+ uframe = kmem_cache_alloc(xusb_cache, gfp_flags);
+ if(!uframe) {
+ if((rate_limit++ % 1003) == 0)
+ XUSB_ERR(xusb, "frame allocation failed (%d)\n", rate_limit);
+ return NULL;
+ }
+ usb_init_urb(&uframe->urb);
+ p = usb_buffer_alloc(xusb->udev, size, gfp_flags, &uframe->urb.transfer_dma);
+ if(!p) {
+ if((rate_limit++ % 1003) == 0)
+ XUSB_ERR(xusb, "buffer allocation failed (%d)\n", rate_limit);
+ kfree(uframe);
+ return NULL;
+ }
+ uframe->uframe_magic = UFRAME_MAGIC;
+ uframe->transfer_buffer_length = size;
+ uframe->transfer_buffer = p;
+ uframe->xusb = xusb;
+ xframe_init(xbus, &uframe->xframe, uframe->transfer_buffer, uframe->transfer_buffer_length, uframe);
+ return &uframe->xframe;
+}
+
+void free_xframe(xbus_t *xbus, xframe_t *xframe)
+{
+ struct uframe *uframe = xframe_to_uframe(xframe);
+ struct urb *urb = &uframe->urb;
+
+ BUG_ON(xbus->transport.priv != uframe->xusb);
+ //XUSB_INFO(uframe->xusb, "frame_free\n");
+ usb_buffer_free(urb->dev, uframe->transfer_buffer_length,
+ urb->transfer_buffer,
+ urb->transfer_dma);
+ memset(uframe, 0, sizeof(*uframe));
+ kmem_cache_free(xusb_cache, uframe);
+}
+
+/*------------------------------------------------------------------*/
+
+/*
+ * Actuall frame sending -- both PCM and commands.
+ */
+static int do_send_xframe(xbus_t *xbus, xframe_t *xframe)
{
- xusb_t *xusb;
struct urb *urb;
+ xusb_t *xusb;
int ret = 0;
- size_t size;
- struct xusb_endpoint *xusb_ep;
+ struct uframe *uframe;
+ static int rate_limit;
BUG_ON(!xframe);
- BUG_ON(!xbus);
- xusb = xbus->priv;
+ BUG_ON(xframe->xframe_magic != XFRAME_MAGIC);
+ xusb = xusb_of(xbus);
BUG_ON(!xusb);
if(!xusb->present) {
- static int rate_limit;
-
- if((rate_limit++ % 5000) == 0)
- XBUS_ERR(xbus, "USB device not present. Dropping packets (#%d).\n",
- rate_limit);
+ if((rate_limit++ % 1003) == 0)
+ XUSB_ERR(xusb,
+ "abort do_send_xframe during device disconnect (%d)\n", rate_limit);
ret = -ENODEV;
- goto freepack;
+ goto failure;
}
/*
* If something really bad happend, do not overflow the USB stack
@@ -278,209 +367,126 @@ static int xusb_xframe_send(xbus_t *xbus, xframe_t *xframe)
static int rate_limit;
if((rate_limit++ % 5000) == 0)
- XBUS_ERR(xbus, "USB device is totaly stuck. Dropping packets (#%d).\n",
- rate_limit);
+ XUSB_ERR(xusb,
+ "USB device is totaly stuck. Dropping packets (#%d).\n",
+ rate_limit);
ret = -ENODEV;
- goto freepack;
- }
- size = XFRAME_LEN(xframe);
- xusb_ep = &xusb->endpoints[XUSB_SEND];
- urb = xpp_urb_new(xusb, XUSB_SEND, size);
- if (!urb) {
- ERR("No free urbs available\n");
- ret = -ENOMEM;
- goto freepack;
+ goto failure;
}
-
- /* FIXME: FIXME: FIXME: we use copy+free until low-level drivers allocate memory themselves */
-
- memcpy(urb->transfer_buffer, xframe->packets, size);
-
+ uframe = xframe->priv;
+ BUG_ON(!uframe);
+ BUG_ON(uframe->uframe_magic != UFRAME_MAGIC);
+ uframe_recompute(uframe, XUSB_SEND);
+ urb = &uframe->urb;
+ BUG_ON(!urb);
+ /* update urb length */
+ urb->transfer_buffer_length = XFRAME_LEN(xframe);
+ do_gettimeofday(&xframe->tv_submitted);
ret = usb_submit_urb(urb, GFP_ATOMIC);
if(ret < 0) {
static int rate_limit;
if((rate_limit++ % 1000) < 5)
- ERR("%s: failed submit_urb: %d\n", __FUNCTION__, ret);
- xpp_urb_delete(urb);
+ XUSB_ERR(xusb, "failed submit_urb: %d\n", ret);
ret = -EBADF;
- goto freepack;
+ goto failure;
}
- if (print_dbg)
- dump_xframe("USB_FRAME_SEND", xbus, xframe);
- do_gettimeofday(&xusb->last_tx);
+// if (print_dbg)
+// dump_xframe("USB_FRAME_SEND", xbus, xframe);
atomic_inc(&xusb->pending_writes);
-freepack:
- xbus->ops->xframe_free(xbus, xframe); // FIXME: eventually will be done in the urb callback
- if(ret < 0)
- XUSB_COUNTER(xusb, TX_ERRORS)++;
+ return 0;
+failure:
+ XUSB_COUNTER(xusb, TX_ERRORS)++;
+ FREE_SEND_XFRAME(xbus, xframe); /* return to pool */
return ret;
}
-static void xpp_urb_delete(struct urb *urb)
-{
- BUG_ON(!urb);
- // DBG(GENERAL, "%s: (%d) %p %X", __FUNCTION__, urb->transfer_buffer_length, urb->transfer_buffer, urb->transfer_dma);
- usb_buffer_free (urb->dev, urb->transfer_buffer_length,
- urb->transfer_buffer,
- urb->transfer_dma);
- usb_free_urb(urb);
-}
-
-static struct urb *xpp_urb_new(xusb_t *xusb, enum xusb_dir dir, size_t size)
+/*
+ * PCM wrapper
+ */
+static int xframe_send_pcm(xbus_t *xbus, xframe_t *xframe)
{
- struct usb_device *udev = xusb->udev;
- struct xusb_endpoint *xusb_ep = &xusb->endpoints[dir];
- unsigned int ep_addr = xusb_ep->ep_addr;
- usb_complete_t urb_cb = xusb_ep->callback;
- struct urb *urb;
- unsigned char *buffer; /* the buffer to send data */
- unsigned int epnum = ep_addr & USB_ENDPOINT_NUMBER_MASK;
- int pipe = usb_pipein(ep_addr)
- ? usb_rcvbulkpipe(udev, epnum)
- : usb_sndbulkpipe(udev, epnum);
-
- if(size > xusb_ep->max_size)
- return NULL;
- urb = usb_alloc_urb(0, GFP_ATOMIC);
- if (!urb) {
- err("No free urbs available");
- return NULL;
- }
+ xusb_t *xusb;
- /* on some platforms using this kind of buffer alloc
- * call eliminates a dma "bounce buffer".
- *
- * NOTE: you'd normally want i/o buffers that hold
- * more than one packet, so that i/o delays between
- * packets don't hurt throughput. (Probably applies only to isochronous
- * transfers)
- */
- urb->transfer_flags = (URB_NO_TRANSFER_DMA_MAP | URB_ASYNC_UNLINK);
- buffer = usb_buffer_alloc(udev, size, GFP_ATOMIC, &urb->transfer_dma);
- // DBG(GENERAL, "(%d) %p / %x", size, buffer, urb->transfer_dma);
- if (!buffer) {
- err("Couldn't allocate buffer");
- usb_free_urb(urb);
- return NULL;
+ BUG_ON(!xbus);
+ BUG_ON(!xframe);
+ xusb = xusb_of(xbus);
+ BUG_ON(!xusb);
+ if(xusb->drop_next_pcm) {
+ FREE_SEND_XFRAME(xbus, xframe); /* return to pool */
+ xusb->drop_next_pcm = 0;
+ return -EIO;
}
- usb_fill_bulk_urb(urb, udev, pipe, buffer, size, urb_cb, xusb);
- return urb;
+ return do_send_xframe(xbus, xframe);
}
-/*------------------------- Receive Tasklet Handling ---------------*/
-
-static void xframe_queue_init(struct xframe_queue *q)
+/*
+ * commands wrapper
+ */
+static int xframe_send_cmd(xbus_t *xbus, xframe_t *xframe)
{
- memset(q, 0, sizeof(*q));
- spin_lock_init(&q->lock);
- INIT_LIST_HEAD(&q->head);
+ BUG_ON(!xbus);
+ BUG_ON(!xframe);
+ //XBUS_INFO(xbus, "%s:\n", __FUNCTION__);
+ return do_send_xframe(xbus, xframe);
}
-static int xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
+/*
+ * get a urb from the receive_pool and submit it on the read endpoint.
+ */
+static bool xusb_listen(xusb_t *xusb)
{
- unsigned long flags;
- int ret = 1;
+ xbus_t *xbus = get_xbus(xusb->xbus_num);
+ xframe_t *xframe;
+ struct uframe *uframe;
+ int ret = 0;
- spin_lock_irqsave(&q->lock, flags);
- if(q->count >= MAX_RECV_QUEUE) {
- q->overflows++;
- ret = 0;
+ BUG_ON(!xbus);
+ xframe = ALLOC_RECV_XFRAME(xbus);
+ if(!xframe) {
+ XBUS_ERR(xbus, "Empty receive_pool\n");
goto out;
}
- if(++q->count > q->worst_count)
- q->worst_count = q->count;
- list_add_tail(&xframe->frame_list, &q->head);
-out:
- spin_unlock_irqrestore(&q->lock, flags);
- return ret;
-}
-
-static xframe_t *xframe_dequeue(struct xframe_queue *q)
-{
- unsigned long flags;
- xframe_t *frm = NULL;
- struct list_head *h;
-
- spin_lock_irqsave(&q->lock, flags);
- if(list_empty(&q->head))
+ uframe = xframe_to_uframe(xframe);
+ uframe_recompute(uframe, XUSB_RECV);
+ ret = usb_submit_urb(&uframe->urb, GFP_ATOMIC);
+ if(ret < 0) {
+ XBUS_ERR(xbus, "Failed to submit a receive urb\n");
+ FREE_RECV_XFRAME(xbus, xframe);
goto out;
- h = q->head.next;
- list_del(h);
- q->count--;
- frm = list_entry(h, xframe_t, frame_list);
-out:
- spin_unlock_irqrestore(&q->lock, flags);
- return frm;
-}
-
-static void xusb_handle_xframe(xbus_t *xbus, xframe_t *xframe)
-{
- xusb_t *xusb;
- int cpu = smp_processor_id();
-
- BUG_ON(!xbus);
- xusb = xbus->priv;
- BUG_ON(!xusb);
- xusb->cpu_rcv_intr[cpu]++;
- if(!xframe_enqueue(&xusb->receive_queue, xframe)) {
- xbus->ops->xframe_free(xbus, xframe);
- return;
}
- tasklet_schedule(&xusb->receive_tasklet);
-}
-
-static void receive_tasklet_func(unsigned long data)
-{
- xusb_t *xusb = (xusb_t *)data;
- xbus_t *xbus;
- xframe_t *xframe = NULL;
- int cpu = smp_processor_id();
-
- BUG_ON(!xusb);
- xbus = xusb->xbus;
- BUG_ON(!xbus);
- xusb->cpu_rcv_tasklet[cpu]++;
- while((xframe = xframe_dequeue(&xusb->receive_queue)) != NULL)
- xframe_receive(xbus, xframe);
-}
-
-static void init_receive_tasklet(xusb_t *xusb)
-{
- xframe_queue_init(&xusb->receive_queue);
- tasklet_init(&xusb->receive_tasklet, receive_tasklet_func, (unsigned long)xusb);
+ ret = 1;
+out:
+ put_xbus(xbus);
+ return ret;
}
/*------------------------- XPP USB Bus Handling -------------------*/
-#define XUSB_MODEL(interface, ep_in,ep_out,type,str) \
- { \
- .iface_num = (interface), \
- .in = { .ep_addr = (ep_in) }, \
- .out = { .ep_addr = (ep_out) }, \
- .bus_type = (type), \
- .desc = (str) \
- }
+enum XUSB_MODELS {
+ MODEL_FPGA_XPD
+};
static const struct xusb_model_info {
const char *desc;
int iface_num;
struct xusb_endpoint in;
struct xusb_endpoint out;
- xbus_type_t bus_type;
} model_table[] = {
- XUSB_MODEL(0, 0x86, 0x02, FIRMWARE_XPP, "FPGA_XPD"),
+ [MODEL_FPGA_XPD] {
+ .iface_num = 0,
+ .in = { .ep_addr = 0x86 },
+ .out = { .ep_addr = 0x02 },
+ .desc = "FPGA_XPD"
+ },
};
/* table of devices that work with this driver */
static const struct usb_device_id xusb_table [] = {
-// { USB_DEVICE(0x04B4, 0x8613) }, // default of cypress
- { USB_DEVICE(0xE4E4, 0x2211), .driver_info=(kernel_ulong_t)&model_table[0] }, // OLD FPGA
- { USB_DEVICE(0xE4E4, 0x1132), .driver_info=(kernel_ulong_t)&model_table[0] }, // FPGA_FXS
- { USB_DEVICE(0xE4E4, 0x1142), .driver_info=(kernel_ulong_t)&model_table[0] }, // FPGA_1141
- { USB_DEVICE(0xE4E4, 0x1152), .driver_info=(kernel_ulong_t)&model_table[0] }, // FPGA_1151
- /* "Gadget Zero" firmware runs under Linux */
- //{ USB_DEVICE(0x0525, 0xa4a0) },
+ { USB_DEVICE(0xE4E4, 0x1132), .driver_info=(kernel_ulong_t)&model_table[MODEL_FPGA_XPD] }, // FPGA_FXS
+ { USB_DEVICE(0xE4E4, 0x1142), .driver_info=(kernel_ulong_t)&model_table[MODEL_FPGA_XPD] }, // FPGA_1141
+ { USB_DEVICE(0xE4E4, 0x1152), .driver_info=(kernel_ulong_t)&model_table[MODEL_FPGA_XPD] }, // FPGA_1151
+ { USB_DEVICE(0xE4E4, 0x1162), .driver_info=(kernel_ulong_t)&model_table[MODEL_FPGA_XPD] }, // FPGA_1161
{ } /* Terminating entry */
};
@@ -580,7 +586,7 @@ static int set_endpoints(xusb_t *xusb, struct usb_host_interface *iface_desc, st
ep_addr = endpoint->bEndpointAddress;
if(!BULK_ENDPOINT(endpoint)) {
- DBG(GENERAL, "endpoint 0x%x is not bulk: mbAttributes=0x%X\n",
+ DBG(DEVICES, "endpoint 0x%x is not bulk: mbAttributes=0x%X\n",
ep_addr, endpoint->bmAttributes);
continue;
}
@@ -605,10 +611,10 @@ static int set_endpoints(xusb_t *xusb, struct usb_host_interface *iface_desc, st
}
}
if (!xusb->endpoints[XUSB_RECV].ep_addr || !xusb->endpoints[XUSB_SEND].ep_addr) {
- ERR("Couldn't find bulk-in or bulk-out endpoints\n");
+ XUSB_ERR(xusb, "Couldn't find bulk-in or bulk-out endpoints\n");
return 0;
}
- DBG(GENERAL, "in=0x%02X out=0x%02X\n", xusb->endpoints[XUSB_RECV].ep_addr, xusb->endpoints[XUSB_SEND].ep_addr);
+ DBG(DEVICES, "in=0x%02X out=0x%02X\n", xusb->endpoints[XUSB_RECV].ep_addr, xusb->endpoints[XUSB_SEND].ep_addr);
return 1;
}
@@ -626,18 +632,15 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
struct xusb_model_info *model_info = (struct xusb_model_info*)id->driver_info;
struct proc_dir_entry *procsummary = NULL;
xbus_t *xbus = NULL;
- struct xusb_endpoint *xusb_ep;
unsigned long flags;
int retval = -ENOMEM;
- size_t xframe_size;
int i;
- DBG(GENERAL, "New XUSB device MODEL=%s bus_type=%d\n", model_info->desc, model_info->bus_type);
+ DBG(DEVICES, "New XUSB device MODEL=%s\n", model_info->desc);
if(iface_desc->desc.bInterfaceNumber != model_info->iface_num) {
- DBG(GENERAL, "Skip interface #%d != #%d\n",
+ DBG(DEVICES, "Skip interface #%d != #%d\n",
iface_desc->desc.bInterfaceNumber, model_info->iface_num);
- retval = -ENODEV;
- goto probe_failed;
+ return -ENODEV;
}
/* The USB stack before 2.6.10 seems to be a bit shoddy. It seems that when being called
@@ -669,6 +672,8 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
init_MUTEX (&xusb->sem);
atomic_set(&xusb->pending_writes, 0);
+ atomic_set(&xusb->pcm_tx_drops, 0);
+ atomic_set(&xusb->usb_sluggish_count, 0);
xusb->udev = udev;
xusb->interface = interface;
xusb->model_info = model_info;
@@ -677,17 +682,6 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
retval = -ENODEV;
goto probe_failed;
}
- xusb_ep = &xusb->endpoints[XUSB_RECV];
-
- /* Receive tasklets */
- init_receive_tasklet(xusb);
-
- xusb->read_urb = xpp_urb_new(xusb, XUSB_RECV, xusb_ep->max_size);
- if (!xusb->read_urb) {
- ERR("No free urbs available\n");
- retval = -ENOMEM;
- goto probe_failed;
- }
#ifndef USB_FIELDS_MISSING
xusb->serial = udev->serial;
xusb->manufacturer = udev->manufacturer;
@@ -699,8 +693,8 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
USB_GET_STRING(udev, iProduct, xusb->product);
USB_GET_IFACE_NAME(udev, iface_desc, xusb->interface_name);
#endif
- INFO("XUSB: manufacturer=[%s] product=[%s] serial=[%s] interface=[%s]\n",
- xusb->manufacturer, xusb->product, xusb->serial, xusb->interface_name);
+ INFO("XUSB: %s -- %s -- %s\n",
+ xusb->manufacturer, xusb->product, xusb->interface_name);
/* allow device read, write and ioctl */
xusb->present = 1;
@@ -717,17 +711,12 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
xusb->minor = interface->minor;
/* let the user know what node this device is now attached to */
- DBG(GENERAL, "USB XPP device now attached to minor %d\n", xusb->minor);
-
- /* Allocate high level structures */
- xframe_size = min(xusb->endpoints[XUSB_SEND].max_size , xusb->endpoints[XUSB_RECV].max_size);
- xbus = xbus_new(&xusb_ops, xframe_size);
+ DBG(DEVICES, "USB XPP device now attached to minor %d\n", xusb->minor);
+ xbus = xbus_new(&xusb_ops, min(xusb->endpoints[XUSB_SEND].max_size, xusb->endpoints[XUSB_RECV].max_size), xusb);
if(!xbus) {
retval = -ENOMEM;
goto probe_failed;
}
- xbus->bus_type = model_info->bus_type;
-
spin_lock_irqsave(&xusb_lock, flags);
for(i = 0; i < MAX_BUSES; i++) {
if(xusb_array[i] == NULL)
@@ -739,18 +728,13 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
retval = -ENOMEM;
goto probe_failed;
}
- {
- char path[XBUS_DESCLEN];
-
- usb_make_path(udev, path, XBUS_DESCLEN); // May trunacte... ignore
- snprintf(xbus->busdesc, XBUS_DESCLEN, "%s", path);
- }
+ usb_make_path(udev, xusb->path, XBUS_DESCLEN); // May trunacte... ignore
+ snprintf(xbus->busdesc, XBUS_DESCLEN, "%s", xusb->path);
if(xusb->serial && xusb->serial[0])
- snprintf(xbus->serialnum, SERIALNUM_SIZE, "usb:%s", xusb->serial);
- DBG(GENERAL, "GOT XPP USB BUS #%d: %s (type=%d)\n", i, xbus->busdesc, xbus->bus_type);
-
+ snprintf(xbus->label, LABEL_SIZE, "usb:%s", xusb->serial);
+ xusb->index = i;
xusb_array[i] = xusb;
-
+ XUSB_DBG(DEVICES, xusb, "GOT XPP USB BUS: %s\n", xbus->busdesc);
#ifdef CONFIG_PROC_FS
DBG(PROC, "Creating proc entry " PROC_USBXPP_SUMMARY " in bus proc dir.\n");
@@ -765,20 +749,14 @@ static int xusb_probe(struct usb_interface *interface, const struct usb_device_i
procsummary->owner = THIS_MODULE;
#endif
bus_count++;
- retval = usb_submit_urb(xusb->read_urb, GFP_ATOMIC);
- if(retval < 0) {
- ERR("%s: Failed to submit the receive URB errno=%d\n", __FUNCTION__, retval);
- }
- xusb->xbus = xbus;
- xbus->priv = xusb;
+ xusb->xbus_num = xbus->num;
+ xusb_listen(xusb);
xbus_activate(xbus);
return retval;
probe_failed:
ERR("Failed to initialize xpp usb bus: %d\n", retval);
usb_set_intfdata (interface, NULL);
if(xusb) {
- if(xusb->read_urb)
- xpp_urb_delete(xusb->read_urb);
if(xusb->minor) // passed registration phase
usb_deregister_dev(interface, &xusb_class);
kfree(xusb);
@@ -812,13 +790,12 @@ static void xusb_disconnect(struct usb_interface *interface)
int minor;
int i;
- DBG(GENERAL, "CALLED\n");
+ DBG(DEVICES, "CALLED\n");
/* prevent races with open() */
down (&disconnect_sem);
xusb = usb_get_intfdata (interface);
- usb_set_intfdata (interface, NULL);
- xbus = xusb->xbus;
+ xbus = get_xbus(xusb->xbus_num);
/* find our xusb */
for(i = 0; i < MAX_BUSES; i++) {
@@ -830,184 +807,196 @@ static void xusb_disconnect(struct usb_interface *interface)
#ifdef CONFIG_PROC_FS
if(xbus->proc_xbus_dir) {
- XBUS_DBG(GENERAL, xbus, "Remove proc_entry: " PROC_USBXPP_SUMMARY "\n");
+ XBUS_DBG(PROC, xbus, "Remove proc_entry: " PROC_USBXPP_SUMMARY "\n");
remove_proc_entry(PROC_USBXPP_SUMMARY, xbus->proc_xbus_dir);
}
#endif
- tasklet_kill(&xusb->receive_tasklet);
- xusb->present = 0;
+ /*
+ * put_xbus() would be called during xbus_disconnect()
+ */
xbus_disconnect(xbus); // Blocking until fully deactivated!
+ xusb->present = 0;
+ usb_set_intfdata (interface, NULL);
down (&xusb->sem);
-
minor = xusb->minor;
/* give back our minor */
usb_deregister_dev (interface, &xusb_class);
- /* terminate an ongoing read */
- /* terminate an ongoing write */
- // FIXME: Does it really kill pending URB's?
-
- if(xusb->read_urb)
- xpp_urb_delete(xusb->read_urb);
-
up (&xusb->sem);
- DBG(GENERAL, "Semaphore released\n");
-
+ DBG(DEVICES, "Semaphore released\n");
kfree(xusb);
up (&disconnect_sem);
- DBG(GENERAL, "XUSB #%d now disconnected\n", minor);
+ XUSB_INFO(xusb, "now disconnected\n");
}
static void xpp_send_callback(USB_PASS_CB(urb))
{
- xusb_t *xusb = (xusb_t *)urb->context;
- xbus_t *xbus = xusb->xbus;
- struct timeval now;
- long usec_diff;
+ struct uframe *uframe = urb_to_uframe(urb);
+ xframe_t *xframe = &uframe->xframe;
+ xusb_t *xusb = uframe->xusb;
+ xbus_t *xbus = get_xbus(xusb->xbus_num);
+ struct timeval now;
+ long usec;
+ int writes = atomic_read(&xusb->pending_writes);
+ int i;
- BUG_ON(!xbus);
+ if(!xbus) {
+ XUSB_ERR(xusb, "Sent URB does not belong to a valid xbus anymore...\n");
+ return;
+ }
//flip_parport_bit(6);
atomic_dec(&xusb->pending_writes);
do_gettimeofday(&now);
- usec_diff =
- (now.tv_sec - xusb->last_tx.tv_sec)*1000*1000 +
- (now.tv_usec - xusb->last_tx.tv_usec);
- if(usec_diff > xusb->max_tx_delay)
- xusb->max_tx_delay = usec_diff;
- if(unlikely(usec_diff > 500)) {
- static int rate_limit;
-
- if((rate_limit++ % 5003) == 0)
- XBUS_NOTICE(xbus, "Slagish USB. %ld usec to transmit a frame\n",
- usec_diff);
- }
+ xusb->last_tx = xframe->tv_submitted;
+ usec = usec_diff(&now, &xframe->tv_submitted);
+ if(usec > xusb->max_tx_delay)
+ xusb->max_tx_delay = usec;
+ i = usec / USEC_BUCKET;
+ if(i >= NUM_BUCKETS)
+ i = NUM_BUCKETS - 1;
+ xusb->usb_tx_delay[i]++;
+ if(unlikely(usec > tx_sluggish)) {
+ atomic_inc(&xusb->usb_sluggish_count);
+ if(xusb->sluggish_debounce++ > drop_pcm_after) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 500) /* skip first messages */
+ XUSB_NOTICE(xusb,
+ "Sluggish USB. Dropping next PCM frame (pending_writes=%d)\n",
+ writes);
+ atomic_inc(&xusb->pcm_tx_drops);
+ xusb->drop_next_pcm = 1;
+ xusb->sluggish_debounce = 0;
+ }
+ } else
+ xusb->sluggish_debounce = 0;
/* sync/async unlink faults aren't errors */
if (urb->status && !(urb->status == -ENOENT || urb->status == -ECONNRESET)) {
static int rate_limit;
if((rate_limit++ % 1000) < 10)
- DBG(GENERAL, "nonzero read bulk status received: %d\n", urb->status);
+ XUSB_ERR(xusb,
+ "nonzero write bulk status received: %d (pending_writes=%d)\n",
+ urb->status, writes);
XUSB_COUNTER(xusb, TX_ERRORS)++;
- }
- xpp_urb_delete(urb);
- if(!xusb->present) {
- ERR("A packet from non-connected device?\n");
- return;
- }
- /* allow device read, write and ioctl */
- XUSB_COUNTER(xusb, TX_FRAMES)++;
+ } else
+ XUSB_COUNTER(xusb, TX_FRAMES)++;
+ FREE_SEND_XFRAME(xbus, xframe);
+ if(!xusb->present)
+ XUSB_ERR(xusb, "A urb from non-connected device?\n");
+ put_xbus(xbus);
}
static void xpp_receive_callback(USB_PASS_CB(urb))
{
- xusb_t *xusb = (xusb_t *)urb->context;
- xbus_t *xbus;
- xpacket_t *pack;
- xframe_t *xframe;
+ struct uframe *uframe = urb_to_uframe(urb);
+ xframe_t *xframe = &uframe->xframe;
+ xusb_t *xusb = uframe->xusb;
+ xbus_t *xbus = get_xbus(xusb->xbus_num);
size_t size;
- int retval;
bool do_resubmit = 1;
bool is_inuse = 0;
- struct timeval now;
- do_gettimeofday(&now);
- BUG_ON(!xusb);
- xbus = xusb->xbus;
+ //flip_parport_bit(7);
if(!xbus) {
- NOTICE("spurious URB\n");
+ XUSB_ERR(xusb, "Received URB does not belong to a valid xbus anymore...\n");
return;
}
- //flip_parport_bit(7);
if (urb->status) {
DBG(GENERAL, "nonzero read bulk status received: %d\n", urb->status);
XUSB_COUNTER(xusb, RX_ERRORS)++;
- /* Free old URB, allocate a fresh one */
- if(xusb->read_urb)
- xpp_urb_delete(xusb->read_urb);
- xusb->read_urb = xpp_urb_new(xusb, XUSB_RECV, xusb->endpoints[XUSB_RECV].max_size);
- if (!xusb->read_urb) {
- ERR("URB allocation failed\n");
- do_resubmit = 0;;
- }
- goto end;
+ goto err;
}
- if(!down_read_trylock(&xbus->in_use)) {
- ERR("%s: xbus is going down\n", __FUNCTION__);
+ if(!XBUS_GET(xbus)) {
+ XUSB_ERR(xusb, "Dropping urb. Is shutting down.\n");
do_resubmit = 0;
- goto end;
+ goto err;
}
is_inuse = 1;
if(!xusb->present) {
- ERR("A packet from non-connected device?\n");
+ XUSB_ERR(xusb, "A packet from non-connected device?\n");
do_resubmit = 0;
- goto end;
+ goto err;
}
size = urb->actual_length;
if(size == 0) {
static int rate_limit;
if((rate_limit++ % 5003) == 0)
- XBUS_NOTICE(xbus, "Received a zero length URBs (%d)\n", rate_limit);
+ XUSB_NOTICE(xusb, "Received a zero length URBs (%d)\n", rate_limit);
XUSB_COUNTER(xusb, RCV_ZERO_LEN)++;
- goto end;
- }
- xframe = xbus->ops->xframe_new(xbus, GFP_ATOMIC);
- if(!xframe) {
- ERR("%s: Not enough memory for packets. Dropping\n", __FUNCTION__);
- goto end;
+ goto err;
}
atomic_set(&xframe->frame_len, size);
- pack = (xpacket_t *)xframe->packets;
- memcpy(xframe->packets, urb->transfer_buffer, size);
- xframe->tv_received = now;
+ do_gettimeofday(&xframe->tv_received);
- if (print_dbg)
- dump_xframe("USB_FRAME_RECEIVE", xbus, xframe);
+// if (print_dbg)
+// dump_xframe("USB_FRAME_RECEIVE", xbus, xframe);
XUSB_COUNTER(xusb, RX_FRAMES)++;
- // Send UP
- if(rx_tasklet)
- xusb_handle_xframe(xbus, xframe);
- else
- xframe_receive(xbus, xframe);
+ /* Send UP */
+ xbus_receive_xframe(xbus, xframe);
end:
if(is_inuse)
- up_read(&xbus->in_use);
- if(do_resubmit) {
- retval = usb_submit_urb(urb, GFP_ATOMIC);
- if (retval < 0) {
- ERR("failed re-submitting read urb, error %d\n", retval);
- return;
- }
- }
+ XBUS_PUT(xbus);
+ if(do_resubmit)
+ xusb_listen(xusb);
+ put_xbus(xbus);
+ return;
+err:
+ FREE_RECV_XFRAME(xbus, xframe);
+ goto end;
}
/*------------------------- Initialization -------------------------*/
+static void xpp_usb_cleanup(void)
+{
+ if(xusb_cache) {
+ kmem_cache_destroy(xusb_cache);
+ xusb_cache = NULL;
+ }
+}
+
int __init xpp_usb_init(void)
{
- int result;
+ int ret;
//xusb_t *xusb;
- INFO("revision %s\n", XPP_VERSION);
+ INFO("revision %s [sizeof(uframe)=%d]\n", XPP_VERSION, sizeof(struct uframe));
+ xusb_cache = kmem_cache_create("xusb_cache",
+ sizeof(xframe_t) + XFRAME_DATASIZE,
+ 0, 0,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
+ NULL,
+#endif
+ NULL);
+ if(!xusb_cache) {
+ ret = -ENOMEM;
+ goto failure;
+ }
/* register this driver with the USB subsystem */
- result = usb_register(&xusb_driver);
- if (result) {
- ERR("usb_register failed. Error number %d\n", result);
- return result;
+ ret = usb_register(&xusb_driver);
+ if (ret) {
+ ERR("usb_register failed. Error number %d\n", ret);
+ goto failure;
}
return 0;
+failure:
+ xpp_usb_cleanup();
+ return ret;
}
-void __exit xpp_usb_cleanup(void)
+void __exit xpp_usb_shutdown(void)
{
DBG(GENERAL, "\n");
/* deregister this driver with the USB subsystem */
usb_deregister(&xusb_driver);
+ xpp_usb_cleanup();
}
@@ -1021,6 +1010,8 @@ static int xusb_read_proc(char *page, char **start, off_t off, int count, int *e
int i;
//unsigned long stamp = jiffies;
xusb_t *xusb = data;
+ uint usb_tx_delay[NUM_BUCKETS];
+ const int mark_limit = tx_sluggish/USEC_BUCKET;
if(!xusb)
goto out;
@@ -1033,12 +1024,8 @@ static int xusb_read_proc(char *page, char **start, off_t off, int count, int *e
len += sprintf(page + len, "USB: manufacturer=%s\n", xusb->manufacturer);
len += sprintf(page + len, "USB: product=%s\n", xusb->product);
len += sprintf(page + len, "USB: serial=%s\n", xusb->serial);
- len += sprintf(page + len, "Minor: %d\n"
- "Model Info: Bus Type=%d (%s)\n",
- xusb->minor,
- xusb->model_info->bus_type,
- xusb->model_info->desc
- );
+ len += sprintf(page + len, "Minor: %d\nModel Info: %s\n",
+ xusb->minor, xusb->model_info->desc);
len += sprintf(page + len, "Endpoints:\n"
"\tIn: 0x%02X - Size: %d)\n"
"\tOut: 0x%02X - Size: %d)\n",
@@ -1050,25 +1037,22 @@ static int xusb_read_proc(char *page, char **start, off_t off, int count, int *e
len += sprintf(page + len, "\npending_writes=%d\n", atomic_read(&xusb->pending_writes));
len += sprintf(page + len, "max_tx_delay=%d\n", xusb->max_tx_delay);
xusb->max_tx_delay = 0;
- if(rx_tasklet) {
- len += sprintf(page + len,
- "receive_queue: count = %5d, worst = %5d, overflows = %5d\n",
- xusb->receive_queue.count,
- xusb->receive_queue.worst_count,
- xusb->receive_queue.overflows);
- xusb->receive_queue.worst_count = 0;
- // xusb->receive_queue.overflows = 0;
- }
- len += sprintf(page + len, "\ncpu_rcv_intr: ");
- for_each_online_cpu(i)
- len += sprintf(page + len, "%5d ", xusb->cpu_rcv_intr[i]);
- len += sprintf(page + len, "\ncpu_rcv_tasklet: ");
- for_each_online_cpu(i)
- len += sprintf(page + len, "%5d ", xusb->cpu_rcv_tasklet[i]);
- len += sprintf(page + len, "\n");
#ifdef DEBUG_PCM_TIMING
len += sprintf(page + len, "\nstamp_last_pcm_read=%lld accumulate_diff=%lld\n", stamp_last_pcm_read, accumulate_diff);
#endif
+ memcpy(usb_tx_delay, xusb->usb_tx_delay, sizeof(usb_tx_delay));
+ len += sprintf(page + len, "usb_tx_delay[%d,%d,%d]: ",
+ USEC_BUCKET, BUCKET_START, NUM_BUCKETS);
+ for(i = BUCKET_START; i < NUM_BUCKETS; i++) {
+ len += sprintf(page + len, "%6d ",
+ usb_tx_delay[i]);
+ if(i == mark_limit)
+ len += sprintf(page + len, "| ");
+ }
+ len += sprintf(page + len, "\nPCM_TX_DROPS: %5d (sluggish: %d)\n",
+ atomic_read(&xusb->pcm_tx_drops),
+ atomic_read(&xusb->usb_sluggish_count)
+ );
len += sprintf(page + len, "\nCOUNTERS:\n");
for(i = 0; i < XUSB_COUNTER_MAX; i++) {
len += sprintf(page + len, "\t%-15s = %d\n", xusb_counters[i].name, xusb->counters[i]);
@@ -1094,10 +1078,10 @@ out:
-MODULE_DESCRIPTION("XPP USB Driver");
+MODULE_DESCRIPTION("XPP USB Transport Driver");
MODULE_AUTHOR("Oron Peled <oron@actcom.co.il>");
MODULE_LICENSE("GPL");
MODULE_VERSION(XPP_VERSION);
module_init(xpp_usb_init);
-module_exit(xpp_usb_cleanup);
+module_exit(xpp_usb_shutdown);
diff --git a/xpp/xpp_zap.c b/xpp/xpp_zap.c
index aabc236..db63095 100644
--- a/xpp/xpp_zap.c
+++ b/xpp/xpp_zap.c
@@ -49,72 +49,20 @@ static const char rcsid[] = "$Id$";
#ifdef CONFIG_PROC_FS
struct proc_dir_entry *xpp_proc_toplevel = NULL;
#define PROC_DIR "xpp"
-#define PROC_SYNC "sync"
#define PROC_XPD_ZTREGISTER "zt_registration"
#define PROC_XPD_BLINK "blink"
#define PROC_XPD_SUMMARY "summary"
#endif
#define MAX_QUEUE_LEN 10000
-#define SAMPLE_TICKS 10000
#define DELAY_UNTIL_DIALTONE 3000
-static struct timer_list xpp_timer;
-static xpd_t *sync_master = NULL; // Start with host based sync
-static unsigned int xpp_timer_count = 0;
-static unsigned int xpp_last_jiffies = 0;
-
-#ifdef ZAPTEL_SYNC_TICK
-static unsigned int zaptel_tick_count = 0;
-/*
- * Statistics variables
- */
-static struct timeval ticked_zaptel;
-static struct timeval ticked_xpp;
-static long usec_lag_curr; /* current: zaptel - xpp */
-static long sigma_lag; /* sum of lags over SYNC_ADJ_INTERVAL */
-static long average_lag; /* average of lags over SYNC_ADJ_INTERVAL */
-static bool zaptel_is_ticking;
-static bool have_sync_mastership;
-static unsigned int sync_tick_nomaster;
-
-#define ZAPTEL_BIG_LAG 2000 /* usec */
-
-#define SYNC_ADJ_MIN (-30) /* minimal firmware drift unit */
-#define SYNC_ADJ_MAX 30 /* maximal firmware drift unit */
-#define SYNC_ADJ_INTERVAL 5000 /* minimum interval between fixes (usec) */
-#define SYNC_ADJ_FACTOR 30 /* sigma usec/drift_unit */
-
-DEF_PARM_BOOL(sync_tick_active, 1, 0644, "Measure via zaptel sync_tick() method");
-
-#endif
-
-
-DEF_PARM_BOOL(pcm_tasklet, 0, 0644, "Handle PCM in a tasklet (lower interrupt load)");
-#define PCM_TASKLET_DEPRECATION "\n" \
- "====================================================================\n" \
- "CONFIGURATION ERROR: 'pcm_tasklet' module parameter is deprecated!!!\n" \
- "====================================================================\n"
-
-DEF_PARM(int, disable_pcm, 0, 0644, "Disable all PCM transmissions");
DEF_PARM(int, print_dbg, 0, 0644, "Print DBG statements");
DEF_PARM_BOOL(zap_autoreg, 0, 0644, "Register spans automatically (1) or not (0)");
DEF_PARM_BOOL(prefmaster, 0, 0644, "Do we want to be zaptel preferred sync master");
-#ifdef XPP_EC_CHUNK
-DEF_PARM_BOOL(xpp_ec, 0, 0444, "Do we use our own (1) or Zaptel's (0) echo canceller");
-#else
-static int xpp_ec = 0;
-#endif
-#ifdef DEBUG_PCMTX
-DEF_PARM(int, pcmtx, -1, 0644, "Forced PCM value to transmit (negative to disable)");
-DEF_PARM(int, pcmtx_chan, 0, 0644, "channel to force PCM value");
-#endif
// DEF_ARRAY(int, pcmtx, 4, 0, "Forced PCM values to transmit");
#include "zap_debug.h"
-#ifdef XPP_EC_CHUNK
-#include "supress/ec_xpp.h"
-#endif
#ifdef DEBUG_SYNC_PARPORT
/*
@@ -152,14 +100,15 @@ void xbus_flip_bit(xbus_t *xbus, unsigned int bitnum0, unsigned int bitnum1)
EXPORT_SYMBOL(xbus_flip_bit);
#endif
-#ifdef ZAPTEL_SYNC_TICK
-static void send_drift(int drift);
-#endif
-static void xpp_tick(unsigned long param);
+static atomic_t num_registered_spans = ATOMIC_INIT(0);
+
+int total_registered_spans(void)
+{
+ return atomic_read(&num_registered_spans);
+}
+
static int zaptel_register_xpd(xpd_t *xpd);
static int zaptel_unregister_xpd(xpd_t *xpd);
-static void xpp_receiveprep(xpd_t *xpd);
-static void do_ec(xpd_t *xpd);
static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int *eof, void *data);
static int proc_xpd_ztregister_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
@@ -167,434 +116,6 @@ static int proc_xpd_blink_read(char *page, char **start, off_t off, int count, i
static int proc_xpd_blink_write(struct file *file, const char __user *buffer, unsigned long count, void *data);
static void xpd_free(xpd_t *xpd);
-static void external_sync(xbus_t *the_xbus)
-{
- int i;
-
- DBG(SYNC, "%s\n", (the_xbus) ? the_xbus->busname : "HOST");
- // Shut all down
- for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = xbus_of(i);
- if(!xbus)
- continue;
- if (!xbus->hardware_exists)
- continue;
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_HOST, 0);
- }
- if(the_xbus)
- CALL_PROTO(GLOBAL, SYNC_SOURCE, the_xbus, NULL, SYNC_MODE_AB, 0);
-}
-
-/*
- * Change sync_master. May block. Cannot be called from atomic context
- */
-static void sync_master_is(const char *msg, xbus_t *xbus)
-{
- xpd_t *xpd = (xbus)? xpd_of(xbus, 0) : NULL;
-
- if(xbus && !xpd) {
- XBUS_NOTICE(xbus, "Cannot set sync master (has no XPD #0).\n");
- xbus = NULL; /* Fallback to HOST */
- }
- DBG(SYNC, "SYNC MASTER CHANGING(%s): %s => %s\n",
- msg,
- (sync_master) ? sync_master->xbus->busname : "HOST",
- (xbus) ? xbus->busname : "HOST");
- /* First stop all generators */
- if(!sync_master)
- del_timer_sync(&xpp_timer);
- /* Now set a new master */
- sync_master = xpd;
- if(sync_master) { // XPD
- external_sync(xbus);
- } else { // HOST
- external_sync(NULL);
- if(!timer_pending(&xpp_timer)) {
- xpp_timer.function = xpp_tick;
- xpp_timer.data = 0;
- xpp_timer.expires = jiffies + 1; /* Must be 1KHz rate */
- add_timer(&xpp_timer);
- }
- }
-}
-
-void elect_syncer(const char *msg)
-{
- int i;
- int j;
- uint timing_priority = 0;
- xpd_t *best_xpd = NULL;
-
- for(i = 0; i < MAX_BUSES; i++) {
- xbus_t *xbus = xbus_of(i);
- if(!xbus)
- continue;
- if (!xbus->hardware_exists)
- continue;
- for(j = 0; j < MAX_XPDS; j++) {
- xpd_t *xpd = xpd_of(xbus, j);
-
- if(!xpd)
- continue;
- if(SPAN_REGISTERED(xpd)) {
- if(xpd->timing_priority > timing_priority) {
- timing_priority = xpd->timing_priority;
- best_xpd = xpd;
- }
- }
- }
- }
- if(!best_xpd) {
- DBG(GENERAL, "%s: elected HOST\n", msg);
- sync_master_is(msg, NULL);
- } else if(!sync_master || (timing_priority > sync_master->timing_priority)) {
- XPD_DBG(GENERAL, best_xpd, "%s: elected with priority %d\n", msg, timing_priority);
- sync_master_is(msg, best_xpd->xbus);
- }
-}
-
-static inline void send_pcm_frame(xbus_t *xbus, xframe_t *xframe)
-{
- unsigned long flags;
- struct timeval now;
- unsigned long sec_diff;
- unsigned long usec_diff;
-
- spin_lock_irqsave(&xbus->lock, flags);
- do_gettimeofday(&now);
- if(unlikely(disable_pcm || !xbus->hardware_exists))
- goto dropit;
- sec_diff = now.tv_sec - xbus->last_tx_sync.tv_sec;
- usec_diff = sec_diff * 1000000 + (now.tv_usec - xbus->last_tx_sync.tv_usec);
- if(unlikely(abs(sec_diff) > 2)) {
- XBUS_DBG(SYNC, xbus, "PCM TX timing restart (sec_diff=%ld)\n", sec_diff);
- xbus->last_tx_sync = now;
- goto dropit;
- }
- if(abs(usec_diff - 1000) > TICK_TOLERANCE) {
- static int rate_limit;
-
- if((rate_limit++ % 5003) == 0)
- XBUS_DBG(SYNC, xbus, "Bad PCM TX timing(%d): usec_diff=%ld.\n",
- rate_limit, usec_diff);
- }
- if(usec_diff > xbus->max_tx_sync)
- xbus->max_tx_sync = usec_diff;
- if(usec_diff < xbus->min_tx_sync)
- xbus->min_tx_sync = usec_diff;
- spin_unlock_irqrestore(&xbus->lock, flags);
- /* OK, really send it */
- if(print_dbg & DBG_PCM )
- dump_xframe("TX_XFRAME_PCM", xbus, xframe);
- xframe_send(xbus, xframe);
- XBUS_COUNTER(xbus, TX_XFRAME_PCM)++;
- xbus->last_tx_sync = now;
- return;
-dropit:
- spin_unlock_irqrestore(&xbus->lock, flags);
- xbus->ops->xframe_free(xbus, xframe);
-}
-
-/*
- * Generic implementations of card_pcmfromspan()/card_pcmtospan()
- * For FXS/FXO
- */
-void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xpacket_t *pack)
-{
- byte *pcm;
- struct zt_chan *chans;
- unsigned long flags;
- int i;
-
- BUG_ON(!xbus);
- BUG_ON(!xpd);
- BUG_ON(!pack);
- RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = lines;
- pcm = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, pcm);
- spin_lock_irqsave(&xpd->lock, flags);
- chans = xpd->span.chans;
- for (i = 0; i < xpd->channels; i++) {
- if(IS_SET(lines, i)) {
- if(SPAN_REGISTERED(xpd)) {
-#ifdef DEBUG_PCMTX
- if(pcmtx >= 0 && pcmtx_chan == i)
- memset((u_char *)pcm, pcmtx, ZT_CHUNKSIZE);
- else
-#endif
- memcpy((u_char *)pcm, chans[i].writechunk, ZT_CHUNKSIZE);
- // fill_beep((u_char *)pcm, xpd->addr.subunit, 2);
- } else
- memset((u_char *)pcm, 0x7F, ZT_CHUNKSIZE);
- pcm += ZT_CHUNKSIZE;
- }
- }
- XPD_COUNTER(xpd, PCM_WRITE)++;
- spin_unlock_irqrestore(&xpd->lock, flags);
-}
-
-void generic_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
-{
- volatile u_char *r;
- byte *pcm;
- xpp_line_t pcm_mask;
- unsigned long flags;
- int i;
-
- pcm = RPACKET_FIELD(pack, GLOBAL, PCM_READ, pcm);
- pcm_mask = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines);
- spin_lock_irqsave(&xpd->lock, flags);
- if (xpd->timer_count & 1)
- r = xpd->readchunk; /* First part */
- else
- r = xpd->readchunk + ZT_CHUNKSIZE * CHANNELS_PERXPD;
- for (i = 0; i < CHANNELS_PERXPD; i++, r += ZT_CHUNKSIZE) {
- /*
- * We don't copy signalling buffers (they may be
- * longer than ZT_CHUNKSIZE).
- */
- if(IS_SET(pcm_mask, i)) {
- // memset((u_char *)r, 0x5A, ZT_CHUNKSIZE); // DEBUG
- // fill_beep((u_char *)r, 1, 1); // DEBUG: BEEP
- memcpy((u_char *)r, pcm, ZT_CHUNKSIZE);
- pcm += ZT_CHUNKSIZE;
- }
- }
- XPD_COUNTER(xpd, PCM_READ)++;
- spin_unlock_irqrestore(&xpd->lock, flags);
-}
-
-static void xbus_tick(xbus_t *xbus)
-{
- int i;
- xpd_t *xpd;
- xframe_t *xframe = NULL;
- xpacket_t *pack = NULL;
- size_t pcm_len;
- bool sent_sync_bit = 0;
-
- /*
- * Update zaptel
- */
- for(i = 0; i < MAX_XPDS; i++) {
- xpd = xpd_of(xbus, i);
- if(xpd && SPAN_REGISTERED(xpd)) {
- /*
- * calls to zt_transmit should be out of spinlocks, as it may call back
- * our hook setting methods.
- */
-#ifdef OPTIMIZE_CHANMUTE
- int j;
-
- for_each_line(xpd, j)
- xpd->chans[j].chanmute = !IS_SET(xpd->wanted_pcm_mask, j) && !IS_SET(xpd->digital_signalling, j);
-#endif
- zt_transmit(&xpd->span);
- }
- }
- /*
- * Fill xframes
- */
- for(i = 0; i < MAX_XPDS; i++) {
- if((xpd = xpd_of(xbus, i)) == NULL)
- continue;
- pcm_len = xpd->pcm_len;
- if(SPAN_REGISTERED(xpd)) {
- if(pcm_len && xpd->card_present) {
- do {
- // pack = NULL; /* FORCE single packet frames */
- if(xframe && !pack) { /* FULL frame */
- send_pcm_frame(xbus, xframe);
- xframe = NULL;
- XBUS_COUNTER(xbus, TX_PCM_FRAG)++;
- }
- if(!xframe) { /* Alloc frame */
- xframe = xbus->ops->xframe_new(xbus, GFP_ATOMIC);
- if (!xframe) {
- XBUS_ERR(xbus, "%s: failed to allocate new xframe\n", __FUNCTION__);
- return;
- }
- }
- pack = xframe_next_packet(xframe, pcm_len);
- } while(!pack);
- XPACKET_INIT(pack, GLOBAL, PCM_WRITE, xpd->xbus_idx);
- XPACKET_LEN(pack) = pcm_len;
- XPACKET_IS_PCM(pack) = 1;
- if(!sent_sync_bit) {
- XPACKET_ADDR(pack).sync_master = 1;
- sent_sync_bit = 1;
- }
- CALL_XMETHOD(card_pcm_fromspan, xbus, xpd, xpd->wanted_pcm_mask, pack);
- XBUS_COUNTER(xbus, TX_PACK_PCM)++;
- }
- }
- }
- if(xframe) /* clean any leftovers */
- send_pcm_frame(xbus, xframe);
- /*
- * Receive PCM
- */
- for(i = 0; i < MAX_XPDS; i++) {
- xpd = xpd_of(xbus, i);
- if(!xpd || !xpd->card_present)
- continue;
- if(SPAN_REGISTERED(xpd))
- xpp_receiveprep(xpd);
- xpd->timer_count = xpp_timer_count;
- /*
- * Must be called *after* tx/rx so
- * D-Chan counters may be cleared
- */
- CALL_XMETHOD(card_tick, xbus, xpd);
- }
-#ifdef ZAPTEL_SYNC_TICK
- if(xbus->sync_adjustment != xbus->sync_adjustment_offset)
- send_drift(xbus->sync_adjustment_offset);
-#endif
-}
-
-void xpp_tick(unsigned long param)
-{
- xbus_t *xbus;
- int i;
-
-#ifdef ZAPTEL_SYNC_TICK
- flip_parport_bit(3);
- do_gettimeofday(&ticked_xpp);
-#endif
- if(!sync_master) /* Called from timer */
- mod_timer(&xpp_timer, jiffies + 1); /* Must be 1KHz rate */
- /* Statistics */
- if((xpp_timer_count % SAMPLE_TICKS) == 0) {
- xpp_last_jiffies = jiffies;
- }
- xpp_timer_count++;
- for(i = 0; i < MAX_BUSES; i++) {
- xbus = xbus_of(i);
- if(!xbus)
- continue;
- if (!xbus->hardware_exists)
- continue;
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_DBG(GENERAL, xbus, "Dropped packet. Is in_use\n");
- continue;
- }
- /* Reset sync LEDs once in a while */
- if((xpp_timer_count % 10000) == 0)
- CALL_PROTO(GLOBAL, RESET_SYNC_COUNTERS, xbus, NULL);
- if(atomic_dec_and_test(&xbus->pcm_nesting)) {
- xbus_tick(xbus);
- } else {
- XBUS_ERR(xbus, "NESTING ATTEMPT: %d\n", atomic_read(&xbus->pcm_nesting));
- }
- atomic_inc(&xbus->pcm_nesting);
- up_read(&xbus->in_use);
- }
-}
-
-void got_sync_from(xpd_t *xpd)
-{
- xbus_t *xbus;
-
- xbus = xpd->xbus;
- if(xpd != sync_master) {
- static int rate_limit;
-
- if((rate_limit++ % 1003) == 0)
- XPD_DBG(SYNC, xpd, "is not SYNC master. Go away! (%d)\n", rate_limit);
- return;
- }
- xpp_tick(0L);
-}
-
-#ifdef ZAPTEL_SYNC_TICK
-static void send_drift(int drift)
-{
- struct timeval now;
- const char *msg;
- xbus_t *xbus;
-
- BUG_ON(!sync_master);
- xbus = sync_master->xbus;
- BUG_ON(drift < SYNC_ADJ_MIN || drift > SYNC_ADJ_MAX);
- do_gettimeofday(&now);
- if(drift == 0)
- msg = "stop";
- else if(drift > 0)
- msg = "up";
- else
- msg = "down";
- XBUS_DBG(SYNC, xbus, "DRIFT adjust %s (%d) (last update %ld seconds ago)\n",
- msg, drift, now.tv_sec - xbus->pll_updated_at);
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_PLL, drift);
- xbus->pll_updated_at = now.tv_sec;
-}
-
-int zaptel_sync_tick(struct zt_span *span, int is_master)
-{
- xpd_t *xpd = span->pvt;
- int offset;
-
- if(!sync_tick_active)
- goto noop;
- /*
- * Detect if any of our spans is zaptel sync master
- */
- if(is_master) {
- sync_tick_nomaster = 0; /* Yes */
- have_sync_mastership = 1;
- }
- if(sync_tick_nomaster < MAX_BUSES * MAX_XPDS) {
- sync_tick_nomaster++; /* Maybe */
- goto noop;
- }
- /* Now we know for sure someone else is zaptel sync master */
- have_sync_mastership = 0;
- BUG_ON(!xpd);
- /*
- * Calculate only if:
- * - HOST sync (for information only)
- * - Called for the sync_master (the function is called
- * for each span, so we don't want to do it multiple times).
- */
- if(sync_master && sync_master != xpd)
- return 0;
- zaptel_tick_count++;
- zaptel_is_ticking = 1;
- flip_parport_bit(1);
- do_gettimeofday(&ticked_zaptel);
- usec_lag_curr =
- (ticked_zaptel.tv_sec - ticked_xpp.tv_sec)*1000*1000 +
- (ticked_zaptel.tv_usec - ticked_xpp.tv_usec);
- if(unlikely(usec_lag_curr > ZAPTEL_BIG_LAG)) {
- static int rate_limit;
-
- if((rate_limit++ % 1003) == 0)
- DBG(SYNC, "Big lag of Xpp ticks relative to zaptel ticks: %ld\n", usec_lag_curr);
- }
- sigma_lag += usec_lag_curr;
- if((zaptel_tick_count % SYNC_ADJ_INTERVAL) == 0) {
- average_lag = sigma_lag / SYNC_ADJ_INTERVAL;
- sigma_lag = 0;
- if(sync_master == xpd) {
- xbus_t *xbus = sync_master->xbus;
-
- /* Calculate required fix */
- offset = (average_lag - 500) / SYNC_ADJ_FACTOR;
- if(offset < SYNC_ADJ_MIN)
- offset = SYNC_ADJ_MIN;
- if(offset > SYNC_ADJ_MAX)
- offset = SYNC_ADJ_MAX;
- xbus->sync_adjustment_offset = offset;
- }
- }
- return 0;
-noop:
- zaptel_is_ticking = 0;
- sigma_lag = 0;
- return 0; /* No auto sync from zaptel */
-}
-#endif
-
static void xpd_free(xpd_t *xpd)
{
xbus_t *xbus = NULL;
@@ -604,7 +125,7 @@ static void xpd_free(xpd_t *xpd)
xbus = xpd->xbus;
if(!xbus)
return;
- XPD_DBG(GENERAL, xpd, "\n");
+ XPD_DBG(DEVICES, xpd, "\n");
#ifdef CONFIG_PROC_FS
if(xpd->proc_xpd_dir) {
if(xpd->proc_xpd_summary) {
@@ -628,12 +149,10 @@ static void xpd_free(xpd_t *xpd)
}
#endif
xbus_unregister_xpd(xbus, xpd);
- if(xpd->readchunk)
- kfree((void *)xpd->readchunk);
- xpd->readchunk = NULL;
if(xpd->xproto)
xproto_put(xpd->xproto);
xpd->xproto = NULL;
+ memset(xpd, 0, sizeof(*xpd));
kfree(xpd);
}
@@ -659,7 +178,7 @@ void card_detected(struct card_desc_struct *card_desc)
BUG_ON(!card_desc);
BUG_ON(card_desc->magic != CARD_DESC_MAGIC);
- xbus = card_desc->xbus;
+ xbus = card_desc->xbus; /* refcount held by xbus_poll() */
type = card_desc->type;
subtype = card_desc->subtype;
unit = card_desc->xpd_addr.unit;
@@ -706,13 +225,13 @@ void card_detected(struct card_desc_struct *card_desc)
xpd->offhook = card_desc->line_status;
/* For USB-1 disable some channels */
- if(xbus->max_xframe_size < RPACKET_SIZE(GLOBAL, PCM_WRITE)) {
+ if(MAX_SEND_SIZE(xbus) < RPACKET_SIZE(GLOBAL, PCM_WRITE)) {
xpp_line_t no_pcm;
no_pcm = 0x7F | xpd->digital_outputs | xpd->digital_inputs;
xpd->no_pcm = no_pcm;
XBUS_NOTICE(xbus, "max xframe size = %d, disabling some PCM channels. no_pcm=0x%04X\n",
- xbus->max_xframe_size, xpd->no_pcm);
+ MAX_SEND_SIZE(xbus), xpd->no_pcm);
}
xbus_register_xpd(xbus, xpd);
#ifdef CONFIG_PROC_FS
@@ -750,13 +269,8 @@ void card_detected(struct card_desc_struct *card_desc)
#endif
if(CALL_XMETHOD(card_init, xbus, xpd) < 0)
goto err;
- CALL_XMETHOD(XPD_STATE, xbus, xpd, 0); /* Turn off all channels */
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_HOST, 0); /* Not a SYNC master (yet) */
+ //CALL_XMETHOD(XPD_STATE, xbus, xpd, 0); /* Turn off all channels */
xpd->card_present = 1;
- if(xbus->last_tx_sync.tv_sec == 0 && xbus->last_tx_sync.tv_usec == 0) {
- do_gettimeofday(&xbus->last_tx_sync); /* start timing ticks */
- xbus->last_rx_sync = xbus->last_tx_sync;
- }
CALL_XMETHOD(XPD_STATE, xbus, xpd, 1); /* Turn on all channels */
XPD_INFO(xpd, "Initialized: %s\n", xpd->type_name);
@@ -794,13 +308,14 @@ static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eo
goto out;
xbus = xpd->xbus;
- len += sprintf(page + len, "%s (%s ,card %s, span %s) %s\n"
+ len += sprintf(page + len, "%s (%s ,card %s, span %d)\n"
+ "timing_priority: %d\n"
"timer_count: %d span->mainttimer=%d\n"
,
xpd->xpdname, xpd->type_name,
(xpd->card_present) ? "present" : "missing",
- (SPAN_REGISTERED(xpd)) ? "registered" : "NOT registered",
- (xpd == sync_master) ? "SYNC MASTER" : "SYNC SLAVE",
+ (SPAN_REGISTERED(xpd)) ? xpd->span.spanno : 0,
+ xpd->timing_priority,
xpd->timer_count, xpd->span.mainttimer
);
len += sprintf(page + len, "Address: U=%d S=%d\n", xpd->addr.unit, xpd->addr.subunit);
@@ -854,11 +369,7 @@ static int xpd_read_proc(char *page, char **start, off_t off, int count, int *eo
continue;
if(IS_SET(xpd->digital_signalling, i))
continue;
-#if 1
rp = chans[i].readchunk;
-#else
- rp = (byte *)xpd->readchunk + (ZT_CHUNKSIZE * i);
-#endif
wp = chans[i].writechunk;
memcpy(rchunk, rp, ZT_CHUNKSIZE);
memcpy(wchunk, wp, ZT_CHUNKSIZE);
@@ -917,7 +428,8 @@ xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channel
size_t alloc_size = sizeof(xpd_t) + privsize;
int type = proto_table->type;
- DBG(GENERAL, "type=%d channels=%d\n", type, channels);
+ DBG(DEVICES, "type=%d channels=%d (alloc_size=%d)\n",
+ type, channels, alloc_size);
if(channels > CHANNELS_PERXPD) {
ERR("%s: type=%d: too many channels %d\n",
__FUNCTION__, type, channels);
@@ -953,20 +465,11 @@ xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channel
ERR("%s: Unable to allocate channels\n", __FUNCTION__);
goto err;
}
- alloc_size = ZT_MAX_CHUNKSIZE * CHANNELS_PERXPD * 2; /* Double Buffer */
- if((xpd->readchunk = kmalloc(alloc_size, GFP_KERNEL)) == NULL) {
- ERR("%s: Unable to allocate memory for readchunk\n", __FUNCTION__);
- goto err;
- }
- /* Initialize read buffers to all blank data */
- memset((void *)xpd->readchunk, 0, alloc_size);
return xpd;
err:
if(xpd) {
if(xpd->chans)
kfree((void *)xpd->chans);
- if(xpd->readchunk)
- kfree((void *)xpd->readchunk);
kfree(xpd);
}
return NULL;
@@ -985,14 +488,8 @@ void xpd_disconnect(xpd_t *xpd)
BUG_ON(!xpd);
- // TODO: elect a new sync master
- if(sync_master == xpd) {
- sync_master_is("DISCONNECT", NULL);
- elect_syncer("DISCONNECT");
- }
-
spin_lock_irqsave(&xpd->lock, flags);
- XPD_DBG(GENERAL, xpd, "(%p)\n", xpd->xproto);
+ XPD_DBG(DEVICES, xpd, "(%p)\n", xpd->xproto);
if(!xpd->card_present) /* Multiple reports */
goto out;
xpd->card_present = 0;
@@ -1001,7 +498,7 @@ void xpd_disconnect(xpd_t *xpd)
update_xpd_status(xpd, ZT_ALARM_NOTOPEN);
/* TODO: Should this be done before releasing the spinlock? */
- XPD_DBG(GENERAL, xpd, "Queuing ZT_EVENT_REMOVED on all channels to ask user to release them\n");
+ XPD_DBG(DEVICES, xpd, "Queuing ZT_EVENT_REMOVED on all channels to ask user to release them\n");
for (i=0; i<xpd->span.channels; i++)
zt_qevent_lock(&xpd->chans[i],ZT_EVENT_REMOVED);
}
@@ -1062,130 +559,12 @@ void update_line_status(xpd_t *xpd, int pos, bool to_offhook)
* it may call back into our xpp_hooksig() and cause
* a nested spinlock scenario
*/
- LINE_DBG(GENERAL, xpd, pos, "rxsig=%s\n", (rxsig == ZT_RXSIG_ONHOOK) ? "ONHOOK" : "OFFHOOK");
+ LINE_DBG(SIGNAL, xpd, pos, "rxsig=%s\n", (rxsig == ZT_RXSIG_ONHOOK) ? "ONHOOK" : "OFFHOOK");
if(SPAN_REGISTERED(xpd))
zt_hooksig(&xpd->chans[pos], rxsig);
}
#ifdef CONFIG_PROC_FS
-
-int proc_sync_read(char *page, char **start, off_t off, int count, int *eof, void *data)
-{
- int len = 0;
- unsigned int xpp_timer_rate;
- unsigned int jiffies_now;
-
- len += sprintf(page + len, "# To modify sync source write into this file:\n");
- len += sprintf(page + len, "# HOST - For host based sync\n");
- len += sprintf(page + len, "# SYNC=nn - XBUS-nn provide sync\n");
- len += sprintf(page + len, "# QUERY=nn - Query XBUS-nn for sync information (DEBUG)\n");
- if(!sync_master)
- len += sprintf(page + len, "HOST\n");
- else {
- len += sprintf(page + len, "SYNC=%02d\n", sync_master->xbus->num);
- len += sprintf(page + len, "PLL DRIFT=%d\n",
- sync_master->xbus->sync_adjustment);
- }
-#ifdef ZAPTEL_SYNC_TICK
- if(sync_tick_active) {
- if(!zaptel_is_ticking) {
- len += sprintf(page + len,
- "Zaptel Reference Sync Not activated\n");
- goto noextsync;
- }
- len += sprintf(page + len, "Zaptel Reference Sync (%s):\n",
- (have_sync_mastership)?"xpp":"external");
- len += sprintf(page + len, "\tzaptel_tick: #%d\n", zaptel_tick_count);
- len += sprintf(page + len, "\ttick - zaptel_tick = %d\n",
- xpp_timer_count - zaptel_tick_count);
- len += sprintf(page + len, "\t%-19s: %5ld (usec)\n",
- "current lag", usec_lag_curr);
- len += sprintf(page + len, "\t%-19s: %5ld (usec)\n",
- "average lag", average_lag);
- if(sync_master) {
- struct timeval now;
- xbus_t *xbus = sync_master->xbus;
-
- do_gettimeofday(&now);
- len += sprintf(page + len, "\t%-19s: %5ld seconds ago\n",
- "PLL updated",
- (xbus->pll_updated_at == 0) ? 0 : now.tv_sec - xbus->pll_updated_at);
- len += sprintf(page + len, "\t%-19s: %5d\n",
- "offset",
- xbus->sync_adjustment_offset);
- }
- }
-noextsync:
-#endif
- len += sprintf(page + len, "\ntick: #%d\n", xpp_timer_count);
- xpp_timer_rate = 0;
- jiffies_now = jiffies;
- if(jiffies_now - xpp_last_jiffies > 0) {
- unsigned long delta = (jiffies_now - xpp_last_jiffies);
- xpp_timer_rate = (xpp_timer_count % SAMPLE_TICKS) * HZ / delta;
- len += sprintf(page + len, "tick rate: %4d/second (SAMPLE_TICKS=%d)\n", xpp_timer_rate, SAMPLE_TICKS);
- }
- if(pcm_tasklet)
- len += sprintf(page + len, PCM_TASKLET_DEPRECATION);
- if (len <= off+count)
- *eof = 1;
- *start = page + off;
- len -= off;
- if (len > count)
- len = count;
- if (len < 0)
- len = 0;
- return len;
-}
-
-static int proc_sync_write(struct file *file, const char __user *buffer, unsigned long count, void *data)
-{
- char buf[MAX_PROC_WRITE];
- int xbus_num;
- int xpd_num;
- xbus_t *xbus;
-
- // DBG(SYNC, "%s: count=%ld\n", __FUNCTION__, count);
- if(count >= MAX_PROC_WRITE)
- return -EINVAL;
- if(copy_from_user(buf, buffer, count))
- return -EFAULT;
- buf[count] = '\0';
- if(strncmp("HOST", buf, 4) == 0) {
- sync_master_is("PROC", NULL);
- } else if(sscanf(buf, "SYNC=%d", &xbus_num) == 1) {
- DBG(SYNC, "SYNC=%d\n", xbus_num);
- if((xbus = xbus_of(xbus_num)) == NULL) {
- ERR("No bus %d exists\n", xbus_num);
- return -ENXIO;
- }
- sync_master_is("PROC", xbus);
- } else if(sscanf(buf, "QUERY=%d", &xbus_num) == 1) {
- DBG(SYNC, "QUERY=%d\n", xbus_num);
- if((xbus = xbus_of(xbus_num)) == NULL) {
- ERR("No bus %d exists\n", xbus_num);
- return -ENXIO;
- }
- CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_QUERY, 0);
- } else if(sscanf(buf, "%d %d", &xbus_num, &xpd_num) == 2) {
- NOTICE("Using deprecated syntax to update /proc/%s/%s\n",
- PROC_DIR, PROC_SYNC);
- if(xpd_num != 0) {
- ERR("Currently can only set sync for XPD #0\n");
- return -EINVAL;
- }
- if((xbus = xbus_of(xbus_num)) == NULL) {
- ERR("No bus %d exists\n", xbus_num);
- return -ENXIO;
- }
- sync_master_is("PROC", xbus);
- } else {
- ERR("%s: cannot parse '%s'\n", __FUNCTION__, buf);
- count = -EINVAL;
- }
- return count;
-}
-
int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int *eof, void *data)
{
int len = 0;
@@ -1195,7 +574,7 @@ int proc_xpd_ztregister_read(char *page, char **start, off_t off, int count, int
BUG_ON(!xpd);
spin_lock_irqsave(&xpd->lock, flags);
- len += sprintf(page + len, "%d\n", SPAN_REGISTERED(xpd));
+ len += sprintf(page + len, "%d\n", SPAN_REGISTERED(xpd) ? xpd->span.spanno : 0);
spin_unlock_irqrestore(&xpd->lock, flags);
if (len <= off+count)
*eof = 1;
@@ -1282,151 +661,6 @@ static int proc_xpd_blink_write(struct file *file, const char __user *buffer, un
/*------------------------- Zaptel Interfaces ----------------------*/
-void pcm_recompute(xpd_t *xpd, xpp_line_t pcm_mask)
-{
- int i;
- int line_count = 0;
- unsigned long flags;
-
- pcm_mask &= ~xpd->digital_signalling; /* without D-Channel */
- pcm_mask &= ~xpd->digital_inputs;
- pcm_mask &= ~xpd->digital_outputs;
- for_each_line(xpd, i)
- if(IS_SET(pcm_mask, i))
- line_count++;
- /*
- * FIXME: Workaround a bug in sync code of the Astribank.
- * Send dummy PCM for sync.
- */
- if(xpd->addr.unit == 0 && pcm_mask == 0) {
- pcm_mask = BIT(0);
- line_count = 1;
- }
- spin_lock_irqsave(&xpd->lock, flags);
- xpd->pcm_len = (line_count)
- ? RPACKET_HEADERSIZE + sizeof(xpp_line_t) + line_count * ZT_CHUNKSIZE
- : 0L;
- xpd->wanted_pcm_mask = pcm_mask;
- spin_unlock_irqrestore(&xpd->lock, flags);
-}
-
-void fill_beep(u_char *buf, int num, int duration)
-{
- bool alternate = (duration) ? (jiffies/(duration*1000)) & 0x1 : 0;
- int which;
- u_char *snd;
-
- /*
- * debug tones
- */
- static u_char beep[] = {
- 0x7F, 0xBE, 0xD8, 0xBE, 0x80, 0x41, 0x24, 0x41, /* Dima */
- 0x67, 0x90, 0x89, 0x90, 0xFF, 0x10, 0x09, 0x10, /* Izzy */
- };
- static u_char beep_alt[] = {
- 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, /* silence */
- };
- if(alternate) {
- which = num % ARRAY_SIZE(beep_alt);
- snd = &beep_alt[which];
- } else {
- which = num % ARRAY_SIZE(beep);
- snd = &beep[which];
- }
- memcpy(buf, snd, ZT_CHUNKSIZE);
-}
-
-#ifdef XPP_EC_CHUNK
-/*
- * Taken from zaptel.c
- */
-static inline void xpp_ec_chunk(struct zt_chan *chan, unsigned char *rxchunk, const unsigned char *txchunk)
-{
- int16_t rxlin;
- int x;
- unsigned long flags;
-
- /* Perform echo cancellation on a chunk if necessary */
- if (!chan->ec)
- return;
- spin_lock_irqsave(&chan->lock, flags);
- for (x=0;x<ZT_CHUNKSIZE;x++) {
- rxlin = ZT_XLAW(rxchunk[x], chan);
- rxlin = xpp_echo_can_update(chan->ec, ZT_XLAW(txchunk[x], chan), rxlin);
- rxchunk[x] = ZT_LIN2X((int)rxlin, chan);
- }
- spin_unlock_irqrestore(&chan->lock, flags);
-}
-#endif
-
-static void do_ec(xpd_t *xpd)
-{
- struct zt_chan *chans = xpd->span.chans;
- int i;
-
-#ifdef WITH_ECHO_SUPPRESSION
- /* FIXME: need to Echo cancel double buffered data */
- for (i = 0;i < xpd->span.channels; i++) {
- if(unlikely(IS_SET(xpd->digital_signalling, i))) /* Don't echo cancel PRI/BRI D-chans */
- continue;
-#ifdef XPP_EC_CHUNK
- /* even if defined, parameterr xpp_ec can override at run-time */
- if (xpp_ec)
- xpp_ec_chunk(&chans[i], chans[i].readchunk, xpd->ec_chunk2[i]);
- else
-#endif
- zt_ec_chunk(&chans[i], chans[i].readchunk, xpd->ec_chunk2[i]);
- memcpy(xpd->ec_chunk2[i], xpd->ec_chunk1[i], ZT_CHUNKSIZE);
- memcpy(xpd->ec_chunk1[i], chans[i].writechunk, ZT_CHUNKSIZE);
- }
-#endif
-}
-
-
-
-static void xpp_receiveprep(xpd_t *xpd)
-{
- volatile u_char *readchunk;
- int i;
- int channels = xpd->channels;
- struct zt_chan *chans = xpd->span.chans;
- unsigned long flags;
-
- spin_lock_irqsave(&xpd->lock, flags);
- // if((xpd->timer_count % 1000) == 0)
- // XPD_DBG(GENERAL, xpd, "%d\n", xpd->timer_count);
-
- if (xpd->timer_count & 1) {
- /* First part */
- readchunk = xpd->readchunk;
- } else {
- readchunk = xpd->readchunk + ZT_CHUNKSIZE * CHANNELS_PERXPD;
- }
-
- for (i = 0; i < channels; i++, readchunk += ZT_CHUNKSIZE) {
- /*
- * We don't copy signalling buffers (they may be
- * longer than ZT_CHUNKSIZE).
- */
- if(unlikely(IS_SET(xpd->digital_signalling, i)))
- continue;
- if(!IS_SET(xpd->mute_dtmf, i) &&
- (IS_SET(xpd->offhook, i) || IS_SET(xpd->cid_on, i) || IS_BRI(xpd))) {
- // memset((u_char *)readchunk, 0x5A, ZT_CHUNKSIZE); // DEBUG
- // fill_beep((u_char *)readchunk, 1, 1); // DEBUG: BEEP
- memcpy(chans[i].readchunk, (u_char *)readchunk, ZT_CHUNKSIZE);
- } else {
- memset(chans[i].readchunk, 0x7F, ZT_CHUNKSIZE); // SILENCE
- }
- }
- spin_unlock_irqrestore(&xpd->lock, flags);
- /*
- * This should be out of spinlocks, as it may call back our hook setting
- * methods
- */
- do_ec(xpd);
- zt_receive(&xpd->span);
-}
/*
* Called from zaptel with spinlock held on chan. Must not call back
@@ -1434,17 +668,41 @@ static void xpp_receiveprep(xpd_t *xpd)
*/
int xpp_open(struct zt_chan *chan)
{
+#if 0
xpd_t *xpd = chan->pvt;
xbus_t *xbus = xpd->xbus;
int pos = chan->chanpos - 1;
unsigned long flags;
+#else
+ xpd_t *xpd;
+ xbus_t *xbus;
+ int pos;
+ unsigned long flags;
+
+ if (!chan) {
+ NOTICE("open called on a null chan\n");
+ return -EINVAL;
+ }
+ xpd = chan->pvt;
+ if (!xpd) {
+ NOTICE("open called on a chan with no pvt (xpd)\n");
+ return -EINVAL;
+ }
+ xbus = xpd->xbus;
+ if (!xbus) {
+ NOTICE("open called on a chan with no xbus\n");
+ return -EINVAL;
+ }
+ pos = chan->chanpos - 1;
+#endif
spin_lock_irqsave(&xbus->lock, flags);
- xbus->open_counter++;
+ atomic_inc(&xbus->xbus_ref_count);
atomic_inc(&xpd->open_counter);
if(IS_SET(xpd->digital_signalling, pos)) /* D-chan offhook */
BIT_SET(xpd->offhook, pos);
- DBG(GENERAL, "chan=%d (open_counter=%d)\n", pos, xbus->open_counter);
+ DBG(DEVICES, "chan=%d (xbus_ref_count=%d)\n",
+ pos, atomic_read(&xbus->xbus_ref_count));
spin_unlock_irqrestore(&xbus->lock, flags);
if(xpd->xops->card_open)
xpd->xops->card_open(xpd, pos);
@@ -1457,45 +715,48 @@ int xpp_close(struct zt_chan *chan)
xbus_t *xbus = xpd->xbus;
int pos = chan->chanpos - 1;
unsigned long flags;
- bool should_remove = 0;
spin_lock_irqsave(&xbus->lock, flags);
- xbus->open_counter--;
atomic_dec(&xpd->open_counter);
- if (!xbus->hardware_exists && xbus->open_counter == 0)
- should_remove = 1;
if(IS_SET(xpd->digital_signalling, pos)) /* D-chan onhook */
BIT_CLR(xpd->offhook, pos);
spin_unlock_irqrestore(&xbus->lock, flags);
if(xpd->xops->card_close)
xpd->xops->card_close(xpd, pos);
- DBG(GENERAL, "chan=%d (open_counter=%d, should_remove=%d)\n", pos, xbus->open_counter, should_remove);
- if(should_remove) {
- XBUS_DBG(GENERAL, xbus, "Going to remove\n");
+ XPD_DBG(GENERAL, xpd, "pid=%d: chan=%d (xbus_ref_count=%d)\n",
+ current->pid, pos, atomic_read(&xbus->xbus_ref_count));
+ if(atomic_dec_and_test(&xbus->xbus_ref_count))
xbus_remove(xbus);
- }
return 0;
}
+void report_bad_ioctl(const char *msg, xpd_t *xpd, int pos, unsigned int cmd)
+{
+ XPD_NOTICE(xpd, "%s: Bad ioctl\n", msg);
+ XPD_NOTICE(xpd, "ENOTTY: chan=%d cmd=0x%x\n", pos, cmd);
+ XPD_NOTICE(xpd, " IOC_TYPE=0x%02X\n", _IOC_TYPE(cmd));
+ XPD_NOTICE(xpd, " IOC_DIR=0x%02X\n", _IOC_DIR(cmd));
+ XPD_NOTICE(xpd, " IOC_NR=%d\n", _IOC_NR(cmd));
+ XPD_NOTICE(xpd, " IOC_SIZE=0x%02X\n", _IOC_SIZE(cmd));
+}
+
int xpp_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long arg)
{
xpd_t *xpd = chan->pvt;
int pos = chan->chanpos - 1;
- int ret = 0;
+ if(!xpd) {
+ ERR("%s: channel in pos %d, was already closed. Ignore.\n",
+ __FUNCTION__, pos);
+ return -ENODEV;
+ }
switch (cmd) {
default:
/* Some span-specific commands before we give up: */
if (xpd->xops->card_ioctl != NULL) {
- ret = xpd->xops->card_ioctl(xpd, pos, cmd, arg);
- if (ret != -ENOTTY)
- return ret;
+ return xpd->xops->card_ioctl(xpd, pos, cmd, arg);
}
- XPD_DBG(GENERAL, xpd, "ENOTTY: chan=%d cmd=0x%x\n", pos, cmd);
- XPD_DBG(GENERAL, xpd, " IOC_TYPE=0x%02X\n", _IOC_TYPE(cmd));
- XPD_DBG(GENERAL, xpd, " IOC_DIR=0x%02X\n", _IOC_DIR(cmd));
- XPD_DBG(GENERAL, xpd, " IOC_NR=0x%02X\n", _IOC_NR(cmd));
- XPD_DBG(GENERAL, xpd, " IOC_SIZE=0x%02X\n", _IOC_SIZE(cmd));
+ report_bad_ioctl(THIS_MODULE->name, xpd, pos, cmd);
return -ENOTTY;
}
return 0;
@@ -1507,10 +768,14 @@ static int xpp_hooksig(struct zt_chan *chan, zt_txsig_t txsig)
xbus_t *xbus;
int pos = chan->chanpos - 1;
- BUG_ON(!xpd);
+ if(!xpd) {
+ ERR("%s: channel in pos %d, was already closed. Ignore.\n",
+ __FUNCTION__, pos);
+ return -ENODEV;
+ }
xbus = xpd->xbus;
BUG_ON(!xbus);
- DBG(GENERAL, "Setting %s to %s (%d)\n", chan->name, txsig2str(txsig), txsig);
+ DBG(SIGNAL, "Setting %s to %s (%d)\n", chan->name, txsig2str(txsig), txsig);
return CALL_XMETHOD(card_hooksig, xbus, xpd, pos, txsig);
}
@@ -1527,7 +792,6 @@ int xpp_maint(struct zt_span *span, int cmd)
char loopback_data[] = "THE-QUICK-BROWN-FOX-JUMPED-OVER-THE-LAZY-DOG";
#endif
- BUG_ON(!xpd);
DBG(GENERAL, "span->mainttimer=%d\n", span->mainttimer);
switch(cmd) {
case ZT_MAINT_NONE:
@@ -1559,51 +823,6 @@ int xpp_maint(struct zt_span *span, int cmd)
return ret;
}
-#if 0
-/* Okay, now we get to the signalling. You have several options: */
-
-/* Option 1: If you're a T1 like interface, you can just provide a
- rbsbits function and we'll assert robbed bits for you. Be sure to
- set the ZT_FLAG_RBS in this case. */
-
-/* Opt: If the span uses A/B bits, set them here */
-int (*rbsbits)(struct zt_chan *chan, int bits);
-
-/* Option 2: If you don't know about sig bits, but do have their
- equivalents (i.e. you can disconnect battery, detect off hook,
- generate ring, etc directly) then you can just specify a
- sethook function, and we'll call you with appropriate hook states
- to set. Still set the ZT_FLAG_RBS in this case as well */
-int (*hooksig)(struct zt_chan *chan, zt_txsig_t hookstate);
-
-/* Option 3: If you can't use sig bits, you can write a function
- which handles the individual hook states */
-int (*sethook)(struct zt_chan *chan, int hookstate);
-#endif
-
-static int xpp_echocan(struct zt_chan *chan, int len)
-{
-#ifdef XPP_EC_CHUNK
- if(len == 0) { /* shut down */
- /* zaptel calls this also during channel initialization */
- if(chan->ec) {
- xpp_echo_can_free(chan->ec);
- }
- return 0;
- }
- if(chan->ec) {
- ERR("%s: Trying to override an existing EC (%p)\n", __FUNCTION__, chan->ec);
- return -EINVAL;
- }
- chan->ec = xpp_echo_can_create(len, 0);
- if(!chan->ec) {
- ERR("%s: Failed creating xpp EC (len=%d)\n", __FUNCTION__, len);
- return -EINVAL;
- }
-#endif
- return 0;
-}
-
#ifdef CONFIG_ZAPTEL_WATCHDOG
/*
* If the watchdog detects no received data, it will call the
@@ -1653,10 +872,8 @@ static int zaptel_unregister_xpd(xpd_t *xpd)
if(xpd->card_present)
xpd->xops->card_zaptel_preregistration(xpd, 0);
atomic_dec(&xpd->zt_registered);
+ atomic_dec(&num_registered_spans);
zt_unregister(&xpd->span);
-#ifdef ZAPTEL_SYNC_TICK
- zaptel_is_ticking = 0;
-#endif
if(xpd->card_present)
xpd->xops->card_zaptel_postregistration(xpd, 0);
return 0;
@@ -1678,13 +895,13 @@ static int zaptel_register_xpd(xpd_t *xpd)
return -EEXIST;
}
cn = xpd->channels;
- XPD_DBG(GENERAL, xpd, "Initializing span: %d channels.\n", cn);
+ XPD_DBG(DEVICES, xpd, "Initializing span: %d channels.\n", cn);
memset(xpd->chans, 0, sizeof(struct zt_chan)*cn);
memset(&xpd->span, 0, sizeof(struct zt_span));
span = &xpd->span;
snprintf(span->name, MAX_SPANNAME, "%s/%s", xbus->busname, xpd->xpdname);
- span->deflaw = ZT_LAW_MULAW;
+ span->deflaw = ZT_LAW_MULAW; /* default, may be overriden by card_* drivers */
init_waitqueue_head(&span->maintq);
span->pvt = xpd;
span->channels = cn;
@@ -1713,6 +930,7 @@ static int zaptel_register_xpd(xpd_t *xpd)
XPD_ERR(xpd, "Failed to zt_register span\n");
return -ENODEV;
}
+ atomic_inc(&num_registered_spans);
atomic_inc(&xpd->zt_registered);
xpd->xops->card_zaptel_postregistration(xpd, 1);
/*
@@ -1755,11 +973,7 @@ static int xpp_zap_write_proc(struct file *file, const char __user *buffer, unsi
static void do_cleanup(void)
{
- if(timer_pending(&xpp_timer))
- del_timer_sync(&xpp_timer);
#ifdef CONFIG_PROC_FS
- DBG(GENERAL, "Removing '%s' from proc\n", PROC_SYNC);
- remove_proc_entry(PROC_SYNC, xpp_proc_toplevel);
if(xpp_proc_toplevel) {
DBG(GENERAL, "Removing '%s' from proc\n", PROC_DIR);
remove_proc_entry(PROC_DIR, NULL);
@@ -1771,29 +985,14 @@ static void do_cleanup(void)
int __init xpp_zap_init(void)
{
int ret = 0;
- struct proc_dir_entry *ent;
INFO("revision %s MAX_XPDS=%d (%d*%d)\n", XPP_VERSION,
MAX_XPDS, MAX_UNIT, MAX_SUBUNIT);
-#ifdef WITH_ECHO_SUPPRESSION
- INFO("FEATURE: with ECHO_SUPPRESSION\n");
-#else
- INFO("FEATURE: without ECHO_SUPPRESSION\n");
-#endif
- if (xpp_ec)
- INFO("FEATURE: with XPP_EC_CHUNK\n");
- else
- INFO("FEATURE: without XPP_EC_CHUNK\n");
#ifdef CONFIG_ZAPATA_BRI_DCHANS
INFO("FEATURE: with BRISTUFF support\n");
#else
INFO("FEATURE: without BRISTUFF support\n");
#endif
-#ifdef ZAPTEL_SYNC_TICK
- INFO("FEATURE: with sync_tick() from ZAPTEL\n");
-#else
- INFO("FEATURE: without sync_tick() from ZAPTEL\n");
-#endif
#ifdef OPTIMIZE_CHANMUTE
INFO("FEATURE: with CHANMUTE optimization\n");
#endif
@@ -1803,27 +1002,18 @@ int __init xpp_zap_init(void)
ret = -EIO;
goto err;
}
-
- ent = create_proc_entry(PROC_SYNC, 0644, xpp_proc_toplevel);
- if(!ent) {
- ret = -EFAULT;
- goto err;
- }
- ent->read_proc = proc_sync_read;
- ent->write_proc = proc_sync_write;
- ent->data = NULL;
#endif
ret = xbus_core_init();
if(ret) {
ERR("xbus_core_init failed (%d)\n", ret);
goto err;
}
-
- /* Only timer init. We add it only *after* zt_register */
- init_timer(&xpp_timer);
- sync_master_is("INIT", NULL); /* Internal ticking */
- if(pcm_tasklet)
- ERR(PCM_TASKLET_DEPRECATION);
+ ret = xbus_pcm_init(xpp_proc_toplevel);
+ if(ret) {
+ ERR("xbus_pcm_init failed (%d)\n", ret);
+ xbus_core_shutdown();
+ goto err;
+ }
return 0;
err:
do_cleanup();
@@ -1832,6 +1022,7 @@ err:
void __exit xpp_zap_cleanup(void)
{
+ xbus_pcm_shutdown();
xbus_core_shutdown();
do_cleanup();
}
@@ -1840,17 +1031,13 @@ EXPORT_SYMBOL(print_dbg);
EXPORT_SYMBOL(card_detected);
EXPORT_SYMBOL(xpd_alloc);
EXPORT_SYMBOL(xpd_disconnect);
-EXPORT_SYMBOL(pcm_recompute);
-EXPORT_SYMBOL(generic_card_pcm_fromspan);
-EXPORT_SYMBOL(generic_card_pcm_tospan);
EXPORT_SYMBOL(update_xpd_status);
EXPORT_SYMBOL(update_line_status);
-EXPORT_SYMBOL(fill_beep);
EXPORT_SYMBOL(xpp_open);
EXPORT_SYMBOL(xpp_close);
EXPORT_SYMBOL(xpp_ioctl);
EXPORT_SYMBOL(xpp_maint);
-EXPORT_SYMBOL(elect_syncer);
+EXPORT_SYMBOL(report_bad_ioctl);
MODULE_DESCRIPTION("XPP Zaptel Driver");
MODULE_AUTHOR("Oron Peled <oron@actcom.co.il>");
diff --git a/xpp/xpp_zap.h b/xpp/xpp_zap.h
index 60936a7..fee20c5 100644
--- a/xpp/xpp_zap.h
+++ b/xpp/xpp_zap.h
@@ -25,22 +25,18 @@
#include "xpd.h"
#include "xproto.h"
-void elect_syncer(const char *msg);
void xpd_disconnect(xpd_t *xpd);
void card_detected(struct card_desc_struct *card_desc);
xpd_t *xpd_alloc(size_t privsize, const xproto_table_t *proto_table, int channels);
void xpd_remove(xpd_t *xpd);
void update_xpd_status(xpd_t *xpd, int alarm_flag);
void update_line_status(xpd_t *xpd, int pos, bool good);
-void pcm_recompute(xpd_t *xpd, xpp_line_t tmp_pcm_mask);
-void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpp_line_t lines, xpacket_t *pack);
-void generic_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack);
-void fill_beep(u_char *buf, int num, int duration);
-void got_sync_from(xpd_t *xpd);
int xpp_open(struct zt_chan *chan);
int xpp_close(struct zt_chan *chan);
int xpp_ioctl(struct zt_chan *chan, unsigned int cmd, unsigned long arg);
int xpp_maint(struct zt_span *span, int cmd);
+void report_bad_ioctl(const char *msg, xpd_t *xpd, int pos, unsigned int cmd);
+int total_registered_spans(void);
#ifdef CONFIG_PROC_FS
#include <linux/proc_fs.h>
diff --git a/xpp/xproto.c b/xpp/xproto.c
index 89417b8..83a66d8 100644
--- a/xpp/xproto.c
+++ b/xpp/xproto.c
@@ -205,59 +205,29 @@ out:
return ret;
}
-int xframe_receive(xbus_t *xbus, xframe_t *xframe)
+static int xframe_receive_cmd(xbus_t *xbus, xframe_t *xframe)
{
- byte *p;
- byte *xpacket_start;
byte *xframe_end;
- int ret = 0;
xpacket_t *pack;
+ byte *p;
int len;
- bool is_pcm;
- struct timeval now;
- int usec;
+ int ret;
- if(!down_read_trylock(&xbus->in_use)) {
- XBUS_DBG(GENERAL, xbus, "Dropped xframe. Is in_use\n");
- return -ENODEV;
- }
- p = xpacket_start = xframe->packets;
- xframe_end = xpacket_start + XFRAME_LEN(xframe);
- if(XFRAME_LEN(xframe) < RPACKET_HEADERSIZE) {
- static int rate_limit;
-
- if((rate_limit++ % 1003) == 0) {
- XBUS_NOTICE(xbus, "short xframe\n");
- dump_xframe("short xframe", xbus, xframe);
- }
- goto bad_proto;
- }
- /*
- * We want to check that xframes do not mix PCM and other commands
- */
- is_pcm = XPACKET_IS_PCM((xpacket_t *)p);
- if(is_pcm && (print_dbg & DBG_PCM))
- dump_xframe("RX_XFRAME_PCM", xbus, xframe);
+ p = xframe->packets;
+ xframe_end = p + XFRAME_LEN(xframe);
do {
pack = (xpacket_t *)p;
len = XPACKET_LEN(pack);
/* Sanity checks */
- if(unlikely(is_pcm && XPACKET_OP(pack) != XPROTO_NAME(GLOBAL,PCM_READ))) {
- static int rate_limit;
-
- if((rate_limit++ % 1003) == 0) {
- XBUS_DBG(GENERAL, xbus, "Non-PCM packet within a PCM xframe\n");
- dump_xframe("In PCM xframe", xbus, xframe);
- }
- // goto bad_proto;
- } else if(unlikely(!is_pcm && XPACKET_OP(pack) == XPROTO_NAME(GLOBAL,PCM_READ))) {
+ if(unlikely(XPACKET_OP(pack) == XPROTO_NAME(GLOBAL,PCM_READ))) {
static int rate_limit;
if((rate_limit++ % 1003) == 0) {
XBUS_DBG(GENERAL, xbus, "A PCM packet within a Non-PCM xframe\n");
dump_xframe("In Non-PCM xframe", xbus, xframe);
}
- // goto bad_proto;
+ ret = -EPROTO;
+ goto out;
}
p += len;
if(p > xframe_end || len < RPACKET_HEADERSIZE) {
@@ -267,33 +237,60 @@ int xframe_receive(xbus_t *xbus, xframe_t *xframe)
XBUS_NOTICE(xbus, "Invalid packet length %d\n", len);
dump_xframe("BAD LENGTH", xbus, xframe);
}
- goto bad_proto;
+ ret = -EPROTO;
+ goto out;
}
ret = packet_process(xbus, pack);
if(unlikely(ret < 0))
- goto out;
+ break;
} while(p < xframe_end);
- if(is_pcm)
- XBUS_COUNTER(xbus, RX_XFRAME_PCM)++;
out:
+ FREE_RECV_XFRAME(xbus, xframe);
+ return ret;
+}
+
+int xframe_receive(xbus_t *xbus, xframe_t *xframe)
+{
+ int ret = 0;
+ struct timeval now;
+ struct timeval tv_received;
+ int usec;
+
+ if(XFRAME_LEN(xframe) < RPACKET_HEADERSIZE) {
+ static int rate_limit;
+
+ if((rate_limit++ % 1003) == 0) {
+ XBUS_NOTICE(xbus, "short xframe\n");
+ dump_xframe("short xframe", xbus, xframe);
+ }
+ return -EPROTO;
+ }
+ if(!XBUS_GET(xbus)) {
+ XBUS_DBG(GENERAL, xbus, "Dropped xframe. Is shutting down.\n");
+ return -ENODEV;
+ }
+ tv_received = xframe->tv_received;
+ /*
+ * We want to check that xframes do not mix PCM and other commands
+ */
+ if(XPACKET_IS_PCM((xpacket_t *)xframe->packets))
+ xframe_receive_pcm(xbus, xframe);
+ else
+ ret = xframe_receive_cmd(xbus, xframe);
/* Calculate total processing time */
do_gettimeofday(&now);
- usec = (now.tv_sec - xframe->tv_received.tv_sec) * 1000000 +
- now.tv_usec - xframe->tv_received.tv_usec;
+ usec = (now.tv_sec - tv_received.tv_sec) * 1000000 +
+ now.tv_usec - tv_received.tv_usec;
if(usec > xbus->max_rx_process)
xbus->max_rx_process = usec;
- xbus->ops->xframe_free(xbus, xframe);
- up_read(&xbus->in_use);
+ XBUS_PUT(xbus);
return ret;
-bad_proto:
- ret = -EPROTO;
- goto out;
}
#define VERBOSE_DEBUG 1
#define ERR_REPORT_LIMIT 20
-void dump_packet(const char *msg, xpacket_t *packet, bool print_dbg)
+void dump_packet(const char *msg, const xpacket_t *packet, bool print_dbg)
{
byte op = XPACKET_OP(packet);
byte *addr = (byte *)&XPACKET_ADDR(packet);
diff --git a/xpp/xproto.h b/xpp/xproto.h
index 93ce3a8..fbb6f16 100644
--- a/xpp/xproto.h
+++ b/xpp/xproto.h
@@ -116,26 +116,28 @@ void xpd_set_addr(struct xpd_addr *addr, int xpd_num);
.table = &PROTO_TABLE(prototab) \
}
-#define XPACKET_INIT(p, card, op, to) \
+#define XPACKET_INIT(p, card, op, to, pcm, pcmslot) \
do { \
XPACKET_OP(p) = XPROTO_NAME(card,op); \
XPACKET_LEN(p) = RPACKET_SIZE(card,op); \
+ XPACKET_IS_PCM(p) = (pcm); \
+ XPACKET_PCMSLOT(p) = (pcmslot); \
xpd_set_addr(&XPACKET_ADDR(p), (to)); \
} while(0)
-#define XFRAME_NEW(frm, p, xbus, card, op, to) \
+#define XFRAME_NEW_CMD(frm, p, xbus, card, op, to) \
do { \
int len = RPACKET_SIZE(card,op); \
\
- if(!xbus->hardware_exists) \
+ if(!TRANSPORT_RUNNING(xbus)) \
return -ENODEV; \
- frm = xbus->ops->xframe_new(xbus, GFP_ATOMIC); \
+ frm = ALLOC_SEND_XFRAME(xbus); \
if(!frm) \
return -ENOMEM; \
(p) = xframe_next_packet(frm, len); \
if(!(p)) \
return -ENOMEM; \
- XPACKET_INIT(p, card, op, to); \
+ XPACKET_INIT(p, card, op, to, 0, 0); \
} while(0)
#endif
@@ -277,7 +279,7 @@ struct xpacket {
/* Last byte is chksum */
} PACKED;
-void dump_packet(const char *msg, xpacket_t *packet, bool print_dbg);
+void dump_packet(const char *msg, const xpacket_t *packet, bool print_dbg);
void dump_reg_cmd(const char msg[], const reg_cmd_t *regcmd, bool writing);
int xframe_receive(xbus_t *xbus, xframe_t *xframe);
void notify_bad_xpd(const char *funcname, xbus_t *xbus, const struct xpd_addr addr, const char *msg);
diff --git a/xpp/zap_debug.h b/xpp/zap_debug.h
index ef96f0e..ae5ee40 100644
--- a/xpp/zap_debug.h
+++ b/xpp/zap_debug.h
@@ -22,47 +22,49 @@
*
*/
+#include <zaptel.h> /* for zt_* defs */
+
/* Debugging Macros */
-#define PRINTK(level, fmt, ...) \
- printk(KERN_ ## level "%s-%s: " fmt, #level, THIS_MODULE->name, ## __VA_ARGS__)
+#define PRINTK(level, category, fmt, ...) \
+ printk(KERN_ ## level "%s%s-%s: " fmt, #level, category, THIS_MODULE->name, ## __VA_ARGS__)
-#define XBUS_PRINTK(level, xbus, fmt, ...) \
- printk(KERN_ ## level "%s-%s: %s: " fmt, #level, \
- THIS_MODULE->name, (xbus)->busname, ## __VA_ARGS__)
+#define XBUS_PRINTK(level, category, xbus, fmt, ...) \
+ printk(KERN_ ## level "%s%s-%s: %s: " fmt, #level, \
+ category, THIS_MODULE->name, (xbus)->busname, ## __VA_ARGS__)
-#define XPD_PRINTK(level, xpd, fmt, ...) \
- printk(KERN_ ## level "%s-%s: %s/%s: " fmt, #level, \
- THIS_MODULE->name, (xpd)->xbus->busname, (xpd)->xpdname, ## __VA_ARGS__)
+#define XPD_PRINTK(level, category, xpd, fmt, ...) \
+ printk(KERN_ ## level "%s%s-%s: %s/%s: " fmt, #level, \
+ category, THIS_MODULE->name, (xpd)->xbus->busname, (xpd)->xpdname, ## __VA_ARGS__)
-#define LINE_PRINTK(level, xpd, pos, fmt, ...) \
- printk(KERN_ ## level "%s-%s: %s/%s/%d: " fmt, #level, \
- THIS_MODULE->name, (xpd)->xbus->busname, (xpd)->xpdname, (pos), ## __VA_ARGS__)
+#define LINE_PRINTK(level, category, xpd, pos, fmt, ...) \
+ printk(KERN_ ## level "%s%s-%s: %s/%s/%d: " fmt, #level, \
+ category, THIS_MODULE->name, (xpd)->xbus->busname, (xpd)->xpdname, (pos), ## __VA_ARGS__)
#define DBG(bits, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && PRINTK(DEBUG, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
-#define INFO(fmt, ...) PRINTK(INFO, fmt, ## __VA_ARGS__)
-#define NOTICE(fmt, ...) PRINTK(NOTICE, fmt, ## __VA_ARGS__)
-#define WARNING(fmt, ...) PRINTK(WARNING, fmt, ## __VA_ARGS__)
-#define ERR(fmt, ...) PRINTK(ERR, fmt, ## __VA_ARGS__)
+ ((void)((print_dbg & (DBG_ ## bits)) && PRINTK(DEBUG, "-" #bits, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+#define INFO(fmt, ...) PRINTK(INFO, "", fmt, ## __VA_ARGS__)
+#define NOTICE(fmt, ...) PRINTK(NOTICE, "", fmt, ## __VA_ARGS__)
+#define WARNING(fmt, ...) PRINTK(WARNING, "", fmt, ## __VA_ARGS__)
+#define ERR(fmt, ...) PRINTK(ERR, "", fmt, ## __VA_ARGS__)
#define XBUS_DBG(bits, xbus, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && XBUS_PRINTK(DEBUG, xbus, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
-#define XBUS_INFO(xbus, fmt, ...) XBUS_PRINTK(INFO, xbus, fmt, ## __VA_ARGS__)
-#define XBUS_NOTICE(xbus, fmt, ...) XBUS_PRINTK(NOTICE, xbus, fmt, ## __VA_ARGS__)
-#define XBUS_ERR(xbus, fmt, ...) XBUS_PRINTK(ERR, xbus, fmt, ## __VA_ARGS__)
+ ((void)((print_dbg & (DBG_ ## bits)) && XBUS_PRINTK(DEBUG, "-" #bits, xbus, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+#define XBUS_INFO(xbus, fmt, ...) XBUS_PRINTK(INFO, "", xbus, fmt, ## __VA_ARGS__)
+#define XBUS_NOTICE(xbus, fmt, ...) XBUS_PRINTK(NOTICE, "", xbus, fmt, ## __VA_ARGS__)
+#define XBUS_ERR(xbus, fmt, ...) XBUS_PRINTK(ERR, "", xbus, fmt, ## __VA_ARGS__)
#define XPD_DBG(bits, xpd, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && XPD_PRINTK(DEBUG, xpd, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
-#define XPD_INFO(xpd, fmt, ...) XPD_PRINTK(INFO, xpd, fmt, ## __VA_ARGS__)
-#define XPD_NOTICE(xpd, fmt, ...) XPD_PRINTK(NOTICE, xpd, fmt, ## __VA_ARGS__)
-#define XPD_WARNING(xpd, fmt, ...) XPD_PRINTK(WARNING, xpd, fmt, ## __VA_ARGS__)
-#define XPD_ERR(xpd, fmt, ...) XPD_PRINTK(ERR, xpd, fmt, ## __VA_ARGS__)
+ ((void)((print_dbg & (DBG_ ## bits)) && XPD_PRINTK(DEBUG, "-" #bits, xpd, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+#define XPD_INFO(xpd, fmt, ...) XPD_PRINTK(INFO, "", xpd, fmt, ## __VA_ARGS__)
+#define XPD_NOTICE(xpd, fmt, ...) XPD_PRINTK(NOTICE, "", xpd, fmt, ## __VA_ARGS__)
+#define XPD_WARNING(xpd, fmt, ...) XPD_PRINTK(WARNING, "", xpd, fmt, ## __VA_ARGS__)
+#define XPD_ERR(xpd, fmt, ...) XPD_PRINTK(ERR, "", xpd, fmt, ## __VA_ARGS__)
#define LINE_DBG(bits, xpd, pos, fmt, ...) \
- ((void)((print_dbg & (DBG_ ## bits)) && LINE_PRINTK(DEBUG, xpd, pos, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
-#define LINE_NOTICE(xpd, pos, fmt, ...) LINE_PRINTK(NOTICE, xpd, pos, fmt, ## __VA_ARGS__)
-#define LINE_ERR(xpd, pos, fmt, ...) LINE_PRINTK(ERR, xpd, pos, fmt, ## __VA_ARGS__)
+ ((void)((print_dbg & (DBG_ ## bits)) && LINE_PRINTK(DEBUG, "-" #bits, xpd, pos, "%s: " fmt, __FUNCTION__, ## __VA_ARGS__)))
+#define LINE_NOTICE(xpd, pos, fmt, ...) LINE_PRINTK(NOTICE, "", xpd, pos, fmt, ## __VA_ARGS__)
+#define LINE_ERR(xpd, pos, fmt, ...) LINE_PRINTK(ERR, "", xpd, pos, fmt, ## __VA_ARGS__)
/*
* Bits for print_dbg
@@ -74,6 +76,7 @@
#define DBG_SIGNAL BIT(4)
#define DBG_PROC BIT(5)
#define DBG_REGS BIT(6)
+#define DBG_DEVICES BIT(7) /* instanciation/destruction etc. */
#define DBG_ANY (~0)
void dump_poll(int print_dbg, const char *msg, int poll);